




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、該實(shí)驗(yàn)制作的是小游戲-俄羅斯方塊1.可實(shí)現(xiàn)以下基本功能:用戶可自定義添加或刪除方塊樣式及顏色;用戶可自定義修改游戲背景顏色及按鍵設(shè)置。2.另增加了幾個功能:按鍵設(shè)置改變后點(diǎn)擊保存,會彈出對話框提示“保存成功” ;點(diǎn)擊“開始”運(yùn)行游戲,背景音樂自動播放,點(diǎn)擊暫停后,背景音樂也隨之停止;每消除一行,會有特效聲音提示消除成功;根據(jù)消行多少會自動加分并顯示。游戲界面效果圖如下:配置窗體效果圖如下:磚塊樣式配置效果圖如下:游戲設(shè)計分為如下九個部分:一, 新建窗體“配置窗體”(trmconfig)添加tabcontrol控件(1) 磚塊樣式配置i.abel控件(lblmode)點(diǎn)擊“事件”,選擇“pain
2、t”graphics gp=e.graphics;gp.clear(color.black);pen p=new pen(color.white);for (int i=31;i155;i=i+31)gp.drawline(p,1,i,155,i);for (int i=31;i155;i=i+31)gp.drawline(p,i,1,i,155);solidbrush s=new solidbrush(blockcolor);for (int x=0;x5;x+)for(int y=0;y5;y+)if(struarrx,y)gp.fillrectangle(s,31*x+1,31*y+1,
3、30,30);點(diǎn)擊“事件”,選擇“mouseclick”private bool, struarr=new bool5,5;private color blockcolor=color.red;-if (e.button!=mousebuttons.left)return;int xpos,ypos;xpos=e.x/31;ypos=e.y/31;struarrxpos,ypos=!struarrxpos,ypos;bool b=struarrxpos,ypos;graphics gp=lblmode.creategraphics();solidbrush s=new solidbrush(b
4、 ? blockcolor:color.black);gp.fillrectangle(s,31*xpos+1,31*ypos+1,30,30);gp.dispose();ii.添加colordialog控件添加label(lblcolor)控件點(diǎn)擊“事件”,選擇“click”colordialog1.showdialog();blockcolor=colordialog1.color;lblcolor.backcolor=colordialog1.color;lblmode.invalidate();iii.添加listview控件(lsvblockset)點(diǎn)擊“事件”,選擇“itemsel
5、ectionchanged”if (e.isselected)blockcolor=color.fromargb(int.parse(e.item.subitems1.text);lblcolor.backcolor=blockcolor;string s=e.item.subitems0.text;for(int i=0;is.length;i+)struarri/5,i%5=(si=1)?true:false;lblmode.invalidate();iv.“添加”按鈕(btnadd)bool isempty=false;foreach (bool i in struarr)if(i)is
6、empty=true;break;if (!isempty)messagebox.show(圖案為空,請先用鼠標(biāo)點(diǎn)擊左邊窗口繪制圖案!,提示窗口,messageboxbuttons.ok,messageboxicon.information);return;stringbuilder sb=new stringbuilder(25);foreach (bool i in struarr)sb.append(i?1:0);string blockstring=sb.tostring();foreach(listviewitem item in lsvblockset.items)if (item
7、.subitems0.text=blockstring)messagebox.show(該圖案已經(jīng)存在!,提示窗口,messageboxbuttons.ok,messageboxicon.information);return;listviewitem myitem=new listviewitem();myitem=lsvblockset.items.add(blockstring);myitem.subitems.add(convert.tostring(blockcolor.toargb();v.“刪除”按鈕(btndel)if(lsvblockset.selecteditems.cou
8、nt=0)messagebox.show(請在右邊窗口選擇一個條目進(jìn)行刪除!,提示窗口,messageboxbuttons.ok,messageboxicon.information);return;lsvblockset.items.remove(lsvblockset.selecteditems0);btnclear.performclick();vi.“清空”(btnclear)for (int x=0;x5;x+)for(int y=0;y=33 & e.keyvalue=45 & e.keyvalue=48 & e.keyvalue=65 & e.keyvalue=96 & e.ke
9、yvalue=109 & e.keyvalue=186 & e.keyvalue=219 & e.keyvalue=222)foreach(control c in gbkeyset.controls)control tempc=c as textbox;if(tempc!=null &(textbox)tempc).text!=)if(int)(textbox)tempc).tag)=e.keyvalue)(textbox)tempc).text=;(textbox)tempc).tag=keys.none;(textbox)sender).text=e.keycode.tostring()
10、;(textbox)sender).tag=(keys)e.keyvalue;ii.添加groupbox2控件(gbenvironmentset)“環(huán)境設(shè)置”i.拖入四個label控件ii.拖入三個textbox控件(改名) 一個label控件(lblbackcolor)選擇“事件”,選擇“click”colordialog1.showdialog();lblbackcolor.backcolor=colordialog1.color;iii.i.參數(shù)初始化設(shè)置為配置窗體的代碼窗口添加私有成員變量private config config=new config();初始化config.load
11、fromxmlfile();infoarr info = config.info;listviewitem myitem=new listviewitem();for(int i=0;iinfo.length;i+)myitem=lsvblockset.items.add(infoi.getidstr();myitem.subitems.add(infoi.getcolorstr();讀快捷鍵及環(huán)境設(shè)置參數(shù)txtdown.text=(keys)config.downkey).tostring();txtdown.tag=config.downkey;txtdrop.text=(keys)con
12、fig.dropkey).tostring();txtdrop.tag=config.dropkey;txtleft.text=(keys)config.moveleftkey).tostring();txtleft.tag=config.moveleftkey;txtright.text=(keys)config.moverightkey).tostring();txtright.tag=config.moverightkey;txtdeasil.text=(keys)config.deasilrotatekey).tostring();txtdeasil.tag=config.deasil
13、rotatekey;txtcontra.text=(keys)config.contrarotatekey).tostring();txtcontra.tag=config.contrarotatekey;txtcoorwidth.text=config.coorwidth.tostring();txtcoorheight.text=config.coorheight.tostring();txtrectpix.text=config.rectpix.tostring();lblbackcolor.backcolor=config.backcolor;ii.保存更改選擇“事件”,選擇“clic
14、k”保存用戶更改的設(shè)置infoarr info=new infoarr();foreach(listviewitem item in lsvblockset.items)info.add(item.subitems0.text,item.subitems1.text);config.info=info;config.downkey=(keys)txtdown.tag;config.dropkey=(keys)txtdrop.tag;config.moveleftkey=(keys)txtleft.tag;config.moverightkey=(keys)txtright.tag;config
15、.deasilrotatekey=(keys)txtdeasil.tag;config.contrarotatekey=(keys)txtcontra.tag;config.coorwidth=int.parse(txtcoorwidth.text);config.coorheight=int.parse(txtcoorheight.text);config.rectpix=int.parse(txtrectpix.text);config.backcolor=lblbackcolor.backcolor;config.savetoxmlfile();二, 信息保存解決方案中添加blockse
16、t.xml文件 0000001100011000000000000 -65536 0000000000111100000000000 -16711936 0000000000001100010000100 -8323073 0010000100001100000000000 -16776961 0000000100001100010000000 -32704 0000000100001100001000000 -32513 0000000010001100010000000 -8372160 83 88 65 68 99 97 15 25 20 -16777216 三, 一個磚塊的信息類解決方
17、案中添加blockinfo.cs類private bitarray _id;private color _bcolor;public blockinfo(bitarray id,color bcolor)_id=id;_bcolor=bcolor;public bitarray idgetreturn _id;set_id=value;public color bcolorgetreturn _bcolor;set_bcolor=value;public string getidstr()stringbuilder s=new stringbuilder(25);foreach(bool b
18、in _id)s.append(b?1:0);return s.tostring();public string getcolorstr()return convert.tostring(_bcolor.toargb();由于使用到了color類,要添加命名空間using syetem.drawing;由于使用了stringbuilder類以及bitarray類using system.collections.generic;-using system.collections;四, 多個磚塊信息類解決方案中添加infoarr.cs類i .各個方塊信息類private arraylist inf
19、o = new arraylist();private int _length=0;public int lengthgetreturn _length;public blockinfo thisint indexgetreturn (blockinfo)infoindex;public string thisstring idsetif(value =)return;for(int i=0;iusing system.collections;/由于使用到了messagebox,要添加命名空間using system.windows.forms;由于使用到了color類,還要添加using s
20、yetem.drawing;ii.添加字符轉(zhuǎn)換成員方法private bitarray strtobit(string id)if(id.length !=25)throw new system.formatexception(磚塊樣式信息不合法!請刪除blockset.xml文件,并重新啟動程序);bitarray ba =new bitarray(25);for(int i=0;i=10&value=15&value=10&value=30)_rectpix=value;public color backcolorgetreturn _backcolor;set_backcolor=val
21、ue;public infoarr infogetreturn info;setinfo=value;#endregionii.從xml讀取信息public void loadfromxmlfile()/從xml讀取信息xmltextreader reader;if (file.exists(blockset.xml)reader=new xmltextreader(blockset.xml);elseassembly asm=assembly.getexecutingassembly();stream sm=asm.getmanifestresourcestream(tetris.block
22、set.xml);reader=new xmltextreader(sm);string key=;trywhile(reader.read()if(reader.nodetype =xmlnodetype.element)if(reader.name =id)key=reader.readelementstring().trim();info.add(key,);else if (reader.name =color)infokey=reader.readelementstring().trim();else if (reader.name =downkey)_downkey=(keys)c
23、onvert.toint32(reader.readelementstring().trim();else if (reader.name =dropkey)_dropkey=(keys)convert.toint32(reader.readelementstring().trim();else if (reader.name =moveleftkey)_moveleftkey=(keys)convert.toint32(reader.readelementstring().trim();else if (reader.name =moverightkey)_moverightkey=(key
24、s)convert.toint32(reader.readelementstring().trim();else if (reader.name =deasilrotatekey)_deasilrotatekey=(keys)convert.toint32(reader.readelementstring().trim();else if (reader.name =contrarotatekey)_contrarotatekey=(keys)convert.toint32(reader.readelementstring().trim();else if (reader.name =coor
25、width)_coorwidth=convert.toint32(reader.readelementstring().trim();else if (reader.name =coorheight)_coorheight=convert.toint32(reader.readelementstring().trim();else if (reader.name =rectpix)_rectpix=convert.toint32(reader.readelementstring().trim();else if (reader.name =backcolor)_backcolor=color.
26、fromargb(convert.toint32(reader.readelementstring().trim();catch(exception ex)messagebox.show(ex.tostring();finallyif(reader !=null)reader.close();iii.把信息保存為xml文件public void savetoxmlfile() /把信息保存為xml文件xmldocument doc =new xmldocument();doc.loadxml();xmlnode root=doc.selectsinglenode(blockset);for(i
27、nt i=0;iinfo.length;i+)xmlelement xeltype=doc.createelement(type);xmlelement xelid=doc.createelement(id);xelid.innertext=(blockinfo)infoi).getidstr();xeltype.appendchild(xelid);xmlelement xelcolor=doc.createelement(color);xelcolor.innertext=(blockinfo)infoi).getcolorstr();xeltype.appendchild(xelcolo
28、r);root.appendchild(xeltype);/寫快捷鍵xmlelement xelkey=doc.createelement(key);xmlelement xeldownkey=doc.createelement(downkey);xeldownkey.innertext=convert.toint32(_downkey).tostring();xelkey.appendchild(xeldownkey);xmlelement xeldropkey=doc.createelement(dropkey);xeldropkey.innertext=convert.toint32(_
29、dropkey).tostring();xelkey.appendchild(xeldropkey);xmlelement xelmoveleftkey=doc.createelement(moveleftkey);xelmoveleftkey.innertext=convert.toint32(_moveleftkey).tostring();xelkey.appendchild(xelmoveleftkey);xmlelement xelmoverightkey=doc.createelement(moverightkey);xelmoverightkey.innertext=conver
30、t.toint32(_moverightkey).tostring();xelkey.appendchild(xelmoverightkey);xmlelement xeldeasilrotatekey=doc.createelement(deasilrotatekey);xeldeasilrotatekey.innertext=convert.toint32(_deasilrotatekey).tostring();xelkey.appendchild(xeldeasilrotatekey);xmlelement xelcontrarotatekey=doc.createelement(co
31、ntrarotatekey);xelcontrarotatekey.innertext=convert.toint32(_contrarotatekey).tostring();xelkey.appendchild(xelcontrarotatekey);root.appendchild(xelkey);/寫界面信息xmlelement xelsurface=doc.createelement(surface);xmlelement xelcoorwidth=doc.createelement(coorwidth);xelcoorwidth.innertext= _coorwidth.tost
32、ring();xelsurface.appendchild(xelcoorwidth);xmlelement xelcoorheight=doc.createelement(coorheight);xelcoorheight.innertext= _coorheight.tostring();xelsurface.appendchild(xelcoorheight);xmlelement xelrectpix=doc.createelement(rectpix);xelrectpix.innertext= _rectpix.tostring();xelsurface.appendchild(x
33、elrectpix);xmlelement xelbackcolor=doc.createelement(backcolor);xelbackcolor.innertext=_backcolor.toargb().tostring();xelsurface.appendchild(xelbackcolor);root.appendchild(xelsurface);doc.save(blockset.xml);六, 新建方塊類解決方案中添加block.cs類protected point structarr;protected int _xpos;protected int _ypos;pro
34、tected color _blockcolor;protected color disappercolor;protected int rectpix;public block()public block(point sa, color bcolor, color dcolor, int pix)_blockcolor=bcolor;disappercolor=dcolor;rectpix=pix;structarr=sa;public point thisint indexgetreturn structarrindex;public int lengthgetreturn structa
35、rr.length;#region 成員變量相應(yīng)的屬性public int xposgetreturn _xpos;set_xpos=value;public int yposgetreturn _ypos;set_ypos=value;public color blockcolorgetreturn _blockcolor;#endregion-public void deasilrotate()/順時針旋轉(zhuǎn)int temp;for(int i=0;istructarr.length;i+)temp=structarri.x;structarri.x=structarri.y;structa
36、rri.y=-temp;public void contrarotate()/逆時針旋轉(zhuǎn)int temp;for(int i=0;istructarr.length;i+)temp=structarri.x;structarri.x=-structarri.y;structarri.y=temp;private rectangle pointtorect(point p)/坐標(biāo)點(diǎn)轉(zhuǎn)化為畫布坐標(biāo)值return new rectangle(_xpos + p.x)*rectpix+1,(_ypos-p.y)*rectpix+1,rectpix-2,rectpix-2);public virtual
37、 void paint(graphics gp)/制定畫板下繪制磚塊solidbrush sb=new solidbrush(_blockcolor);foreach(point p in structarr)lock(gp)gp.fillrectangle(sb,pointtorect(p);public void erase(graphics gp)/擦除矩形solidbrush sb=new solidbrush(disappercolor);foreach(point p in structarr)lock(gp)gp.fillrectangle(sb,pointtorect(p);七
38、, 新建生產(chǎn)磚塊的類解決方案中添加blockgroup.cs類private infoarr info;private color disappercolor;private int rectpix;public blockgroup()config config=new config();config.loadfromxmlfile();info=new infoarr();info=config.info;disappercolor=config.backcolor;rectpix=config.rectpix;public block getablock()random rd=new r
39、andom();int keyorder=rd.next(0,info.length);bitaarry ba=infokeyorder.id;int strunum=0;foreach(bool b in ba)if(b)strunum+;point structarr=new pointstrunum;int k=0;for(int j=0;jba.length;j+)if(baj)structarrk.x=j/5-2;structarrk.y=2-j%5;k+;return new block(structarr,infokeyorder.bcolor,disappercolor,rec
40、tpix);八, 新建為磚塊活動定規(guī)則的類在解決方案中添加palette.cs類private int _width=15;private int _height=25;private color, coorarr;private color disappercolor;private graphics gppalette;private graphics gpready;private blockgroup bgroup;private block runblock;private block readyblock;private int rectpix;private system.tim
41、ers.timer timerblock;private int timespan=800;public palette(int x,int y,int pix,color dcolor,graphics gp,graphics gr)_width=x;_height=y;coorarr=new color_width,_height;disappercolor=dcolor;gppalette=gp;gpready=gr;rectpix=pix;public void start()bgroup=new blockgroup();runblock=bgroup.getablock();runblock.xpos=_width/2;int y=0;
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 腦缺氧的臨床護(hù)理
- 2025年伊春從業(yè)資格證模擬考試題貨運(yùn)考題
- 2025-2030兒童樂園產(chǎn)業(yè)規(guī)劃專項(xiàng)研究報告
- 《城市軌道交通票務(wù)工作》課件-項(xiàng)目一 認(rèn)知票務(wù)管理體系 課程思政:愛崗敬業(yè)-城市軌道交通車站站務(wù)人員崗位奉獻(xiàn)-v1
- 大班健康領(lǐng)域活動教案
- 分水嶺腦梗死的臨床護(hù)理
- Fanconi綜合征的臨床護(hù)理
- 2025年電氣安裝工職業(yè)資格考試試題及答案
- 2025年廣告學(xué)專業(yè)考研試卷及答案
- 2025-2030中國魷魚行業(yè)發(fā)展分析及發(fā)展趨勢預(yù)測與投資風(fēng)險研究報告
- 減重肥胖手術(shù)
- 博白芒竹編織工藝
- 語言活動:魔法媽媽
- 橋梁施工測量方案
- 五子棋課件公開課課件
- 數(shù)據(jù)安全與網(wǎng)絡(luò)法律保護(hù)
- 新概念二單詞表新版,Excel 版
- 中國食物:蔬菜史話
- 大班故事活動《找不到眼鏡》課件
- 學(xué)做小小按摩師(課件)全國通用三年級上冊綜合實(shí)踐活動
- 荷蘭語常用詞匯
評論
0/150
提交評論