C#大作業(yè)課程設(shè)計推箱子小游戲設(shè)計_第1頁
C#大作業(yè)課程設(shè)計推箱子小游戲設(shè)計_第2頁
C#大作業(yè)課程設(shè)計推箱子小游戲設(shè)計_第3頁
C#大作業(yè)課程設(shè)計推箱子小游戲設(shè)計_第4頁
C#大作業(yè)課程設(shè)計推箱子小游戲設(shè)計_第5頁
已閱讀5頁,還剩12頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論