版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、该实验制作的是小游戏-俄罗斯方块1.可实现以下基本功能:用户可自定义添加或删除方块样式及颜色;用户可自定义修改游戏背景颜色及按键设置。2.另增加了几个功能:按键设置改变后点击保存,会弹出对话框提示“保存成功” ;点击“开始”运行游戏,背景音乐自动播放,点击暂停后,背景音乐也随之停止;每消除一行,会有特效声音提示消除成功;根据消行多少会自动加分并显示。游戏界面效果图如下:配置窗体效果图如下:砖块样式配置效果图如下:游戏设计分为如下九个部分:一, 新建窗体“配置窗体”(trmconfig)添加tabcontrol控件(1) 砖块样式配置i.abel控件(lblmode)点击“事件”,选择“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);点击“事件”,选择“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)控件点击“事件”,选择“click”colordialog1.showdialog();blockcolor=colordialog1.color;lblcolor.backcolor=colordialog1.color;lblmode.invalidate();iii.添加listview控件(lsvblockset)点击“事件”,选择“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(图案为空,请先用鼠标点击左边窗口绘制图案!,提示窗口,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(该图案已经存在!,提示窗口,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(请在右边窗口选择一个条目进行删除!,提示窗口,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)“环境设置”i.拖入四个label控件ii.拖入三个textbox控件(改名) 一个label控件(lblbackcolor)选择“事件”,选择“click”colordialog1.showdialog();lblbackcolor.backcolor=colordialog1.color;iii.i.参数初始化设置为配置窗体的代码窗口添加私有成员变量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();读快捷键及环境设置参数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”保存用户更改的设置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.添加字符转换成员方法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 成员变量相应的属性public int xposgetreturn _xpos;set_xpos=value;public int yposgetreturn _ypos;set_ypos=value;public color blockcolorgetreturn _blockcolor;#endregion-public void deasilrotate()/顺时针旋转int temp;for(int i=0;istructarr.length;i+)temp=structarri.x;structarri.x=structarri.y;structa
36、rri.y=-temp;public void contrarotate()/逆时针旋转int temp;for(int i=0;istructarr.length;i+)temp=structarri.x;structarri.x=-structarri.y;structarri.y=temp;private rectangle pointtorect(point p)/坐标点转化为画布坐标值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、, 新建生产砖块的类解决方案中添加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);八, 新建为砖块活动定规则的类在解决方案中添加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;f
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024商场美食节临时摊位租赁合同
- 2024年度健身器材购销合同
- 2024年度国际贸易仲裁与诉讼合同
- 2024年定制LED高炮广告牌建设合同
- 2024乙公司向甲方提供跨境电商服务的详细合同条款
- 2024年度grc材料研发与技术转让合同
- 航天英雄课件教学课件
- 2024年住宅租赁协议:个人与房东间的权利义务规定
- 04版0千伏电力施工合同样本
- 2024年工程招投标合同管理实操手册
- GB/T 14337-2008化学纤维短纤维拉伸性能试验方法
- 《原子物理学》(褚圣麟)第六章-磁场中的原子
- 送电线路工程施工质量检验计划
- 无违反计划生育证明(3篇)
- 水稻的形态结构分析课件
- 烟草制品零售点合理布局管理规定
- 印象江苏课件
- 企业团委书记竞聘演讲稿课件
- 口腔材料学知识点
- 化学品安全技术说明书 MSDS(甲胺)
- 锚喷支护施工质量验收评定表(2022版)
评论
0/150
提交评论