![C#大作業(yè)課程設(shè)計(jì)推箱子小游戲設(shè)計(jì)_第1頁(yè)](http://file4.renrendoc.com/view14/M0B/1E/2F/wKhkGWa1ZJ-Ae1y_AACFbBcIe40605.jpg)
![C#大作業(yè)課程設(shè)計(jì)推箱子小游戲設(shè)計(jì)_第2頁(yè)](http://file4.renrendoc.com/view14/M0B/1E/2F/wKhkGWa1ZJ-Ae1y_AACFbBcIe406052.jpg)
![C#大作業(yè)課程設(shè)計(jì)推箱子小游戲設(shè)計(jì)_第3頁(yè)](http://file4.renrendoc.com/view14/M0B/1E/2F/wKhkGWa1ZJ-Ae1y_AACFbBcIe406053.jpg)
![C#大作業(yè)課程設(shè)計(jì)推箱子小游戲設(shè)計(jì)_第4頁(yè)](http://file4.renrendoc.com/view14/M0B/1E/2F/wKhkGWa1ZJ-Ae1y_AACFbBcIe406054.jpg)
![C#大作業(yè)課程設(shè)計(jì)推箱子小游戲設(shè)計(jì)_第5頁(yè)](http://file4.renrendoc.com/view14/M0B/1E/2F/wKhkGWa1ZJ-Ae1y_AACFbBcIe406055.jpg)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
卷可視化程序設(shè)計(jì)
大作業(yè)
推箱子小游戲
班級(jí):
學(xué)號(hào):
指導(dǎo)教師:
東北大學(xué)秦皇島分校計(jì)算機(jī)與通信工程學(xué)院
2018.01
一、任務(wù)描述:
L題目:推箱子小游戲
2.功能描述:
(1)箱子只能推動(dòng)而不能拉動(dòng)。一次只能推動(dòng)一個(gè)箱子。
(2)在一個(gè)狹小的倉(cāng)庫(kù)中,要求把木箱放到指定的位置,稍不小心就會(huì)出現(xiàn)箱子無(wú)法
移動(dòng)或者通道被堵住的情況。
⑶本游戲的目的就是把所有的箱子都推到目標(biāo)位置上。
(4)通過(guò)使用鍵盤(pán)的方向鍵來(lái)控制移動(dòng)方向。
(5)具有重玩本關(guān)、跳過(guò)本關(guān)的功能。
二、成員負(fù)責(zé)部分:獨(dú)立完成(6分)
三、正文
1.功能設(shè)計(jì):
(1).能夠顯示主菜單和界面:允許玩家對(duì)游戲關(guān)卡進(jìn)行設(shè)置,增設(shè)關(guān)卡,把編輯好
的關(guān)卡進(jìn)行存儲(chǔ),并能彈出窗體提示當(dāng)前設(shè)計(jì)完成的關(guān)卡數(shù);
(2).能夠?qū)崿F(xiàn)鍵盤(pán)操作功能:使用上、下、左、右方向鍵控制工人的移動(dòng)方向,空
格鍵重玩;
(3).能夠把放置到目的地的箱子進(jìn)行變色顯示;
(4).游戲勝負(fù)判斷功能:當(dāng)玩家把箱子移動(dòng)到指定位置時(shí),成功通過(guò)當(dāng)前關(guān)卡;
(5).可以切換上一關(guān)、下一關(guān)、增加關(guān)卡以及重玩當(dāng)前關(guān)卡;
(6).可以判斷當(dāng)前的關(guān)卡數(shù),在處于第一關(guān)和最后一關(guān)時(shí)分別不能進(jìn)行“前一關(guān)”和
“后一關(guān)”操作,并彈出窗體進(jìn)行提示;
2.界面設(shè)計(jì):用到的圖片及窗體設(shè)計(jì)
3.具體設(shè)計(jì):
(1).地圖編輯器Form2:使用地圖編輯器來(lái)編輯每一關(guān)游戲的界面,就是在窗體上
點(diǎn)擊生成墻、工人、箱子、通道、目的地,將地圖轉(zhuǎn)換為一個(gè)一維數(shù)組:
010101234567...其中0代表墻,1代表人,2代表箱子,3代表路,4代表目的地,
5代表人在目的地,6代表放到目的地的箱子,通過(guò)這個(gè)數(shù)組游戲就可以進(jìn)行初始
化布局了。最后導(dǎo)出一個(gè)關(guān)卡的配置的plist文件.info,里面存儲(chǔ)的即為初始化數(shù)
組。
Form2里面共兩個(gè)控件。
toolStripBtn:進(jìn)行增加關(guān)卡時(shí),選中編輯地圖所需要的圖片,在編輯地圖時(shí)直接
將要用到的圖片拖到窗口內(nèi),進(jìn)行布局;
pictureBox:用于編輯地圖時(shí),存放布局的樣式;
(2).游戲窗口Forml:通過(guò)依次讀取已保存在固定位置的plist文件進(jìn)行初始化頁(yè)面
信息,生成相應(yīng)的游戲界面;并定義控制功能,實(shí)現(xiàn)用鍵盤(pán)方向鍵控制工人的移
動(dòng)方向;實(shí)現(xiàn)對(duì)關(guān)卡的切換,如上一關(guān)、下一關(guān),能增加關(guān)卡以及重玩當(dāng)前關(guān)卡。
Forml共兩個(gè)控件
ToolStripMenuItem:游戲菜單中分為四個(gè)子菜單,分別為上一關(guān)、下一關(guān)、重玩、
編輯地圖和退出
上一關(guān):進(jìn)入上一個(gè)關(guān)卡
下一關(guān):進(jìn)入下一個(gè)關(guān)卡
重玩:對(duì)本關(guān)卡初始化,重新開(kāi)始本關(guān)
編輯地圖:增加關(guān)卡
退出:退出游戲
pictureBox:用于顯示地圖內(nèi)容
4.運(yùn)行結(jié)果:
島第9關(guān).=1回
游戲
源代碼:
Forml:
usingSystem;
usingSystem.Collections.Generic;
usingSystem.ComponentMode1;
usingSystem.Data;
usingSystem.Drawing;
usingSystem.Text;
usingSystem.Windows.Forms;
usingSystem.10;
namespace推箱子游戲
(
publicpartialclassForml:Form
(
privateintx;〃工人當(dāng)前位置(x,y)
privateinty;
//privateboolflag=true;
//0代表墻,1代表人,2代表箱子,3代表路,4代表目的地
//5代表人在目的地,6代表放到目的地的箱子
privateenumMap_State{None=一1,Wall=0,Worker,
Box,Passageway,Destination,WorkerlnDest,RedBox};
privateMap_State[,]myArray;
//privateint[,]my;
privateintOrder=1;〃游戲關(guān)的序號(hào)
publicForml0
InitializeComponent();
privatevoidReadMap(intn)
stringfilename=〃map\\map_〃+n.ToString()+info”;
FileStreamfs:newFi1eStream(fi1ename,FileMode.Open,FileAccess.Read);
BinaryReaderr=newBinaryReader(fs);
〃讀取數(shù)據(jù)
for(inti=0;i<7;i++)
for(intj=0;j<7;j++)
myArray[i,j]=(Map_State)r.ReadByte();
for(inti=0;i<7;i++)
for(intj=0;j<7;j++)
if(myArray[i,j]==Map_State.Worker)
h=i;y=j;}
r.Close();
fs.Close();
)
publicvoidinitdataO
(
myArray=newMap_State[7,7];
ReadMap(Order);
)
privatevoidForml_Load(objectsender,System.EventArgse)
(
initdataO;
drawimage();
)
〃繪制整個(gè)游戲區(qū)域圖形
privatevoiddrawimage()
(
Bitmapbit=newBitmap(this.pictureBoxl.Width,this.pictureBoxl.Height);
Graphicsg=Graphics.Fromlmage(bit);
SolidBrushredBrush=newSolidBrush(Color.Red);
System.Drawing.Imageimage=newBitmap(^worker.gif〃);
for(inti=0;i<7;i++)
{
for(intj=0;j<7;j++)
(
if(myArray[i,j]—MapState.Wall)
{
image=newBitmap("wall.gif〃);
g.Drawlmage(image,i*50,j*50,50,50);
if(myArrayfi,j]==Map_State.Worker)
image=newBitmap("worker,gif〃);
g.Drawlmage(image,i*50,j*50,50,50);
}
if(myArray[i,j]==Map_State.Box)
(
image=newBitmap(,zbox.gif〃);
g.Drawlmage(image,i*50,j*50,50,50);
}
if(myArray[i,j]==Map_State.Passageway)
(
image=newBitmap("passageway,gif〃);
g.Drawlmage(image,i*50,j*50,50,50);
}
if(myArray[i,j]==Map_State.Destination)
{
image=newBitmap("destination.gif〃);
g.Drawlmage(image,i*50,j*50,50,50);
)
if(myArray[i,j]=二MapState.WorkerlnDest)
(
image=newBitmap("worker,gif");
g.Drawlmage(image,i*50,j*50,50,50);
}
if(myArray[i,j]=二MapState.RedBox)
(
image=newBitmap("redbox.gif〃);
g.Drawlmage(image,i*50,j*50,50,50);
this.pictureBoxl.Image=bit;
privatevoidForml_KeyDown(objectsender,System.Windows.Forms.KeyEventArgse)
intxl,yl,x2,y2;
〃工人當(dāng)前位置(x,y)
switch(e.KeyCode)〃分析按鍵消息
〃向上
caseKeys.Up:
xl=X;
yl=y-1;
x2=x;
y2=y-2;
〃將所有位置輸入以判斷并作地圖更新
MoveTo(xl,yl,x2,y2)
break;
〃向下
caseKeys.Down:
xl=X;
yl=y+1;
x2=x;
y2=y+2;
MoveTo(xl,yl,x2,y2)
break;
〃向左
caseKeys.Left:
xl=x-1;
yl二y;
x2=x-2;
y2二y;
MoveTo(xl,yl,x2,y2)
break;
〃向右
caseKeys.Right:
xl=x+1;
yl二y;
x2=x+2;
y2二y;
MoveTo(xl,yl,x2,y2)
break;
caseKeys.Space:〃空格鍵
重玩ToolStripMenuIteni_Click(null,null);
break;
privatevoidMoveMan(intx,inty)
{
if(myArray[x,y]=二MapState.Worker)
myArray[x,y]=MapState.Passageway;
elseif(myArray[x,y]=二MapState.WorkerlnDest)
myArray[x,y]=MapState.Destination;
privatevoidMoveTo(intxl,intyl,intx2,inty2)
Map_StatePl,P2;
Pl=P2=Map_State.None;
if(IsInGameArea(xl,yl))〃判斷是否在游戲區(qū)域
Pl=myArray[xl,yl];
if(IsInGameArea(x2,y2))
P2=myArray[x2,y2];
if(Pl==Map_State.Passageway)〃P1處為通道
{
MoveMan(x,y);
x=xl;y=yl;
myArray[xl,yl]=Map_State.Worker;
)
if(Pl=二Map_State.Destination)〃P1處為目的地
{
MoveMan(x,y);
x=xl;y=yl;
myArray[xl,yl]=MapState.WorkerlnDest;
)
if(Pl=二MapState.Wall||!IsInGameArea(xl,yl))
〃P1處為墻或出界
(
return;
)
if(Pl=二MapState.Box)〃P1處為箱子
if(P2=MapState.Wall||!IsInGameArea(xl,yl)||P2二二Map_State.Box)〃〃P2處為
墻或出界
(
return;
)
〃以下Pl處為箱子
〃P1處為箱子,P2處為通道
if(Pl=二MapState.Box&&P2=二Map_State.Passageway)
(
MoveMan(x,y);
x=xl;y=yl;
myArray[x2,y2]=Map_State.Box;
myArray[xl,yl]二MapState.Worker;
)
if(Pl=二MapState.Box&&P2=二MapState.Destination)
MoveMan(x,y);
x=xl;y=yl;
myArray[x2,y2]=Map_State.RedBox;
myArray[xl,yl]=Map_State.Worker;
〃P1處為放到目的地的箱子,P2處為通道
if(Pl=Map_State.RedBox&&P2==Map_State.Passageway)
{
MoveMan(x,y);
x=xl;y=yl;
myArray[x2,y2]=Map_State.Box;
myArray[xl,yl]=Map_State.WorkerlnDest;
)
〃P1處為放到目的地的箱子,P2處為目的地
if(Pl==Map_State.RedBox&&P2==Map_State.Destination)
{
MoveMan(x,y);
x=xl;y=yl;
myArray[x2,y2]=MapState.RedBox;
myArray[xl,yl]=MapState.WorkerlnDest;
)
drawimage();
〃這里要驗(yàn)證是否過(guò)關(guān)
if(IsFinishO)
(
MessageBox.Show(〃恭喜你順利過(guò)關(guān)”,〃提示〃);
下一關(guān)ToolStripMenuItemClick(null,null);
return;
)
)
〃判斷是否在游戲區(qū)域
privateboolIsInGameArea(introw,intcol)
(
return(row>=0&&row<7&&col>=0&&col<7);
}
publicboolIsFinish()〃驗(yàn)證是否過(guò)關(guān)
{
boolbFinish=true;
for(inti=0;i<7;i++)
for(intj=0;j<7;j++)
if(myArray[i,j]=二MapState.Destination
|myArray[i,j]—MapState.WorkerlnDest)
bFinish=false;
returnbFinish;
privatevoid編輯地圖ToolStripMenuItem_Click(objectsender,EventArgse)
{
Form2f2=newForm2();
f2.ShowDialogO;
)
privatevoid重玩TooIStripMenuItem_Click(objectsender,EventArgse)
{
this.Text="第"+Order.ToStringO+〃關(guān)〃;
initdataO;
drawimage();
)
privatevoid退出ToolStripMenuItem_Click(objectsender,EventArgse)
{
Application.Exit();
}
privatevoid下一關(guān)ToolStripMenuItem_Click(objectsender,EventArgse)
{
Order++;
stringfi1ename=〃map\\niap_〃+Order.ToStringO+〃.info”;
if(!File.Exists(filename))
(
MessageBox.Show(〃沒(méi)有下一關(guān)了〃,〃提醒〃);
Order一;return;
)
this.Text=〃第〃+Order.ToStringO+〃關(guān)〃;
initdataO;
drawimage();
)
privatevoid上一關(guān)ToolStripMenuItemClick(objectsender,EventArgse)
{
Order一;
stringfi1ename=〃map\\map_〃+Order.ToStringO+〃.info”;
if(!File.Exists(filename))
(
MessageBox.Show(〃沒(méi)有上一關(guān)了〃,〃提醒〃);
Order++;return;
this.Text=〃第〃+Order.ToStringO+〃關(guān)〃;
initdataO;
drawimage();
}
privatevoidpictureBoxl_Click(objectsender,EventArgse)
{
}
privatevoid游戲TooIStripMenuItem_Click(objectsender,EventArgse)
Form2:
usingSystem;
usingSystem.Collections.Generic;
usingSystem.ComponentMode1;
usingSystem.Data;
usingSystem.Drawing;
usingSystem.Text;
usingSystem.Windows.Forms;
usingSystem.10;
namespace推箱子游戲
(
publicpartialclassForm2:Form
(
privateenumMap_State{None=一1,Wall=0,Worker,
Box,Passageway,Destination,WorkerlnDest,RedBox};
privateMapStatem_now_Select;〃當(dāng)前選中的圖標(biāo)工具
privateMap_State[,]myArray=newMapState[7,7];
privateintBlockSize=50;
publicForm2()
(
InitializeComponent();
}
privatevoidForm2_Load(objectsender,EventArgse)
(
ClearMap0;
privatevoidtoolStripBtn_Wall_Click(objectsender,EventArgse)
〃選中墻
m_now_Select=Map_State.Wall;
)
privatevoidtoolStripBtn_Box_Click(objectsender,EventArgse)
{
〃選中箱子
mnowSelect=Map_State.Box;
)
privatevoidtoolStripBtn_Destination_Click(objectsender,EventArgse)
(
〃選中目的地
m_now_Select=Map_State.Destination;
}
privatevoidtoolStripBtn_Passageway_Click(objectsender,EventArgse)
{
〃選中通道
m_now_Select=MapState.Passageway;
)
privatevoidtoolStripBtn_Worker_Click(objectsender,EventArgse)
{
〃選中人
m_now_Select=MapState.Worker;
)
privatevoidtoolStripBtn_New_Click(objectsender,EventArgse)
{
ClearMap();
)
privatevoidtoolStripBtn_Save_Click(objectsender,EventArgse)
(
SaveMap();
)
privatevoidClearMap()
{
m_now_Select=MapState.None;〃當(dāng)前未選中圖標(biāo)工具
for(inti=0;i<7;i++)
for(intj=0;j<7;j++)
myArray[i,j]=MapState.None;
pictureBoxl.Width=7*BlockSize+2;
pictureBoxl.Height=7*BlockSize+2;
drawimage();
privatevoidSaveMap()
if(!Directory.Exists("map"))〃map文件夾是否存在
Directory.CreateDirectory(/zmap,z);
string[]files=Directory.GetFiles(^map^);
intn=files.Length+1;
stringfi1ename=〃map\\map_〃+n.ToString()+〃.info”;
FileStreamfs=newFileStream(fi1ename,FileMode.OpenOrCreate);
BinaryWriterw=newBinaryWriter(fs);
for(inti=0;i<7;i++)
for(intj=0;j<7;j++)
w.Write((byte)myArray[i,j]);
w.Close();
fs.Close();
MessageBox.Show(〃你設(shè)計(jì)的是〃+n.ToString()+〃關(guān)〃);
)
privatevoidpictureBoxlMouseDown(objectsender,MouseEventArgse)
{
intx,y;
x=e.X/50;
y=e.Y/50;
myArray[x,y]=m_now_Select;〃修改地圖
drawimage();
}
〃繪制整個(gè)游戲區(qū)域圖形
privatevoiddrawimage()
(
Bitmapbit=newBitmap(this.pictureBoxl.Width,this.pictureBoxl.Height);
Graphicsg=Graphics.Fromlmage(bit);
SolidBrushredBrush=newSolidBrush(Color.Red);
System.Drawing.Imageimage;
for(inti=0;i<7;i++)
(
for(intj=0;j<7;j++)
(
if(myArray[i,j]—MapState.Wall)
(
image=newBitmap("wall,gif");
g.Drawlmage(image,i*50,j*50,50,50);
}
if(myArray[i,
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 公司餐廳裝修合同范本
- 副總勞務(wù)合同范本
- 產(chǎn)品轉(zhuǎn)讓合同范本
- 商業(yè)使用門(mén)面房出租合同范本
- 修腳店入股合同范例
- 二手升降機(jī)銷售合同范例
- 工程服務(wù)類合同范本
- 教學(xué)儀器購(gòu)銷合同范本
- 出境社旅游合同范本
- 農(nóng)業(yè)種植項(xiàng)目合同范例
- 2024年燃?xì)廨啓C(jī)值班員技能鑒定理論知識(shí)考試題庫(kù)-下(多選、判斷題)
- 交通法規(guī)課件
- (優(yōu)化版)高中地理新課程標(biāo)準(zhǔn)【2024年修訂版】
- 《Python程序設(shè)計(jì)》課件-1:Python簡(jiǎn)介與應(yīng)用領(lǐng)域
- 各類心理量表大全
- DB12T990-2020建筑類建設(shè)工程規(guī)劃許可證設(shè)計(jì)方案規(guī)范
- DB11T 1481-2024生產(chǎn)經(jīng)營(yíng)單位生產(chǎn)安全事故應(yīng)急預(yù)案評(píng)審規(guī)范
- 《氓》教學(xué)設(shè)計(jì) 2023-2024學(xué)年統(tǒng)編版高中語(yǔ)文選擇性必修下冊(cè)
- 《網(wǎng)店運(yùn)營(yíng)與管理》第3版 課件全套 白東蕊 第1-11章 網(wǎng)上開(kāi)店概述- 移動(dòng)網(wǎng)店運(yùn)營(yíng)
- 2024年全國(guó)國(guó)家電網(wǎng)招聘之電網(wǎng)計(jì)算機(jī)考試歷年考試題(附答案)
- 化學(xué)元素周期表注音版
評(píng)論
0/150
提交評(píng)論