![C#大作業(yè)課程設(shè)計推箱子小游戲設(shè)計_第1頁](http://file4.renrendoc.com/view14/M0B/1E/2F/wKhkGWa1ZJ-Ae1y_AACFbBcIe40605.jpg)
![C#大作業(yè)課程設(shè)計推箱子小游戲設(shè)計_第2頁](http://file4.renrendoc.com/view14/M0B/1E/2F/wKhkGWa1ZJ-Ae1y_AACFbBcIe406052.jpg)
![C#大作業(yè)課程設(shè)計推箱子小游戲設(shè)計_第3頁](http://file4.renrendoc.com/view14/M0B/1E/2F/wKhkGWa1ZJ-Ae1y_AACFbBcIe406053.jpg)
![C#大作業(yè)課程設(shè)計推箱子小游戲設(shè)計_第4頁](http://file4.renrendoc.com/view14/M0B/1E/2F/wKhkGWa1ZJ-Ae1y_AACFbBcIe406054.jpg)
![C#大作業(yè)課程設(shè)計推箱子小游戲設(shè)計_第5頁](http://file4.renrendoc.com/view14/M0B/1E/2F/wKhkGWa1ZJ-Ae1y_AACFbBcIe406055.jpg)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
卷可視化程序設(shè)計
大作業(yè)
推箱子小游戲
班級:
學(xué)號:
指導(dǎo)教師:
東北大學(xué)秦皇島分校計算機(jī)與通信工程學(xué)院
2018.01
一、任務(wù)描述:
L題目:推箱子小游戲
2.功能描述:
(1)箱子只能推動而不能拉動。一次只能推動一個箱子。
(2)在一個狹小的倉庫中,要求把木箱放到指定的位置,稍不小心就會出現(xiàn)箱子無法
移動或者通道被堵住的情況。
⑶本游戲的目的就是把所有的箱子都推到目標(biāo)位置上。
(4)通過使用鍵盤的方向鍵來控制移動方向。
(5)具有重玩本關(guān)、跳過本關(guān)的功能。
二、成員負(fù)責(zé)部分:獨(dú)立完成(6分)
三、正文
1.功能設(shè)計:
(1).能夠顯示主菜單和界面:允許玩家對游戲關(guān)卡進(jìn)行設(shè)置,增設(shè)關(guān)卡,把編輯好
的關(guān)卡進(jìn)行存儲,并能彈出窗體提示當(dāng)前設(shè)計完成的關(guān)卡數(shù);
(2).能夠?qū)崿F(xiàn)鍵盤操作功能:使用上、下、左、右方向鍵控制工人的移動方向,空
格鍵重玩;
(3).能夠把放置到目的地的箱子進(jìn)行變色顯示;
(4).游戲勝負(fù)判斷功能:當(dāng)玩家把箱子移動到指定位置時,成功通過當(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)時分別不能進(jìn)行“前一關(guān)”和
“后一關(guān)”操作,并彈出窗體進(jìn)行提示;
2.界面設(shè)計:用到的圖片及窗體設(shè)計
3.具體設(shè)計:
(1).地圖編輯器Form2:使用地圖編輯器來編輯每一關(guān)游戲的界面,就是在窗體上
點(diǎn)擊生成墻、工人、箱子、通道、目的地,將地圖轉(zhuǎn)換為一個一維數(shù)組:
010101234567...其中0代表墻,1代表人,2代表箱子,3代表路,4代表目的地,
5代表人在目的地,6代表放到目的地的箱子,通過這個數(shù)組游戲就可以進(jìn)行初始
化布局了。最后導(dǎo)出一個關(guān)卡的配置的plist文件.info,里面存儲的即為初始化數(shù)
組。
Form2里面共兩個控件。
toolStripBtn:進(jìn)行增加關(guān)卡時,選中編輯地圖所需要的圖片,在編輯地圖時直接
將要用到的圖片拖到窗口內(nèi),進(jìn)行布局;
pictureBox:用于編輯地圖時,存放布局的樣式;
(2).游戲窗口Forml:通過依次讀取已保存在固定位置的plist文件進(jìn)行初始化頁面
信息,生成相應(yīng)的游戲界面;并定義控制功能,實現(xiàn)用鍵盤方向鍵控制工人的移
動方向;實現(xiàn)對關(guān)卡的切換,如上一關(guān)、下一關(guān),能增加關(guān)卡以及重玩當(dāng)前關(guān)卡。
Forml共兩個控件
ToolStripMenuItem:游戲菜單中分為四個子菜單,分別為上一關(guān)、下一關(guān)、重玩、
編輯地圖和退出
上一關(guān):進(jìn)入上一個關(guān)卡
下一關(guān):進(jìn)入下一個關(guān)卡
重玩:對本關(guān)卡初始化,重新開始本關(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)的序號
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();
)
〃繪制整個游戲區(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();
〃這里要驗證是否過關(guān)
if(IsFinishO)
(
MessageBox.Show(〃恭喜你順利過關(guān)”,〃提示〃);
下一關(guān)ToolStripMenuItemClick(null,null);
return;
)
)
〃判斷是否在游戲區(qū)域
privateboolIsInGameArea(introw,intcol)
(
return(row>=0&&row<7&&col>=0&&col<7);
}
publicboolIsFinish()〃驗證是否過關(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(〃沒有下一關(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(〃沒有上一關(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è)計的是〃+n.ToString()+〃關(guān)〃);
)
privatevoidpictureBoxlMouseDown(objectsender,MouseEventArgse)
{
intx,y;
x=e.X/50;
y=e.Y/50;
myArray[x,y]=m_now_Select;〃修改地圖
drawimage();
}
〃繪制整個游戲區(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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 人教版數(shù)學(xué)七年級上冊3.3《解一元一次方程二》聽評課記錄3
- 新版湘教版秋八年級數(shù)學(xué)上冊第五章二次根式課題二次根式的混合運(yùn)算聽評課記錄
- 蘇科版數(shù)學(xué)七年級下冊聽評課記錄11.5用一元一次不等式解決問題
- 湘教版數(shù)學(xué)九年級上冊《小結(jié)練習(xí)》聽評課記錄8
- 湘教版數(shù)學(xué)七年級上冊2.1《用字母表示數(shù)》聽評課記錄1
- s版語文三年級下冊聽評課記錄
- 小學(xué)二年級口算題應(yīng)用題
- 五年級下冊數(shù)學(xué)解方程、口算、應(yīng)用題總匯
- 人教版七年級數(shù)學(xué)下冊 聽評課記錄 9.1.2 第1課時《不等式的性質(zhì)》
- 華師大版數(shù)學(xué)八年級上冊《立方根》聽評課記錄3
- 《農(nóng)機(jī)化促進(jìn)法解讀》課件
- 最高法院示范文本發(fā)布版3.4民事起訴狀答辯狀示范文本
- 2023-2024學(xué)年度上期七年級英語期末試題
- 2024年英語高考全國各地完形填空試題及解析
- 2024至2030年中國餐飲管理及無線自助點(diǎn)單系統(tǒng)數(shù)據(jù)監(jiān)測研究報告
- 2024年燃?xì)廨啓C(jī)值班員技能鑒定理論知識考試題庫-下(多選、判斷題)
- 2024年服裝門店批發(fā)管理系統(tǒng)軟件項目可行性研究報告
- 交通法規(guī)課件
- (優(yōu)化版)高中地理新課程標(biāo)準(zhǔn)【2024年修訂版】
- 《Python程序設(shè)計》課件-1:Python簡介與應(yīng)用領(lǐng)域
- 各類心理量表大全
評論
0/150
提交評論