C++俄罗斯方块程序设计详细说明_第1页
C++俄罗斯方块程序设计详细说明_第2页
C++俄罗斯方块程序设计详细说明_第3页
C++俄罗斯方块程序设计详细说明_第4页
C++俄罗斯方块程序设计详细说明_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论