版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、C#俄罗斯方块程序设计姓 名: 学 号: 专 业:计算机科学与技术学院班 级: 级 班时 间: 20092010年第一学期该实验制作的是小游戏-俄罗斯方块1.可实现以下基本功能:用户可自定义添加或删除方块样式及颜色;用户可自定义修改游戏背景颜色及按键设置。2.另增加了几个功能:按键设置改变后点击保存,会弹出对话框提示“保存成功” ;点击“开始”运行游戏,背景音乐自动播放,点击暂停后,背景音乐也随之停止;每消除一行,会有特效声音提示消除成功;根据消行多少会自动加分并显示。游戏界面效果图如下:配置窗体效果图如下:砖块样式配置效果图如下:游戏设计分为如下九个部分:一, 新建窗体“配置窗体”(TrmC
2、onfig)添加TabControl控件(1) 砖块样式配置I.abel控件(lblMode)点击“事件”,选择“Paint”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(
3、int y=0;y5;y+)if(struArrx,y)gp.FillRectangle(s,31*x+1,31*y+1,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;Graph
4、ics gp=lblMode.CreateGraphics();SolidBrush s=new SolidBrush(b ? 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;lblMod
5、e.Invalidate();III.添加listView控件(lsvBlockSet)点击“事件”,选择“ItemSelectionChanged”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.“添加”按钮
6、(btnAdd)bool isEmpty=false;foreach (bool i in struArr)if(i)isEmpty=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.ToStr
7、ing();foreach(ListViewItem item in lsvBlockSet.Items)if (item.SubItems0.Text=blockString)MessageBox.Show(该图案已经存在!,提示窗口,MessageBoxButtons.OK,MessageBoxIcon.Information);return;ListViewItem myItem=new ListViewItem();myItem=lsvBlockSet.Items.Add(blockString);myItem.SubItems.Add(Convert.ToString(blockCo
8、lor.ToArgb();V.“删除”按钮(btnDel)if(lsvBlockSet.SelectedItems.Count=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.KeyVa
9、lue=45 & e.KeyValue=48 & e.KeyValue=65 & e.KeyValue=96 & e.KeyValue=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)Te
10、mpC).Tag=Keys.None;(TextBox)sender).Text=e.KeyCode.ToString();(TextBox)sender).Tag=(Keys)e.KeyValue;II.添加GroupBox2控件(gbEnvironmentSet)“环境设置”i.拖入四个label控件ii.拖入三个TextBox控件(改名) 一个label控件(lblBackColor)选择“事件”,选择“click”colorDialog1.ShowDialog();lblBackColor.BackColor=colorDialog1.Color;III.i.参数初始化设置为配置窗体的
11、代码窗口添加私有成员变量private Config config=new Config();初始化config.LoadFromXmlFile();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)
12、.ToString();txtDown.Tag=config.DownKey;txtDrop.Text=(Keys)config.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)c
13、onfig.DeasilRotateKey).ToString();txtDeasil.Tag=config.DeasilRotateKey;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();
14、lblBackColor.BackColor=config.BackColor;ii.保存更改选择“事件”,选择“click”保存用户更改的设置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=(K
15、eys)txtLeft.Tag;config.MoveRightKey=(Keys)txtRight.Tag;config.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=lblBac
16、kColor.BackColor;config.SaveToXmlFile();二, 信息保存解决方案中添加BlockSet.Xml文件 0000001100011000000000000 -65536 0000000000111100000000000 -16711936 0000000000001100010000100 -8323073 0010000100001100000000000 -16776961 0000000100001100010000000 -32704 0000000100001100001000000 -32513 0000000010001100010000000
17、 -8372160 83 88 65 68 99 97 15 25 20 -16777216 三, 一个砖块的信息类解决方案中添加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 Ge
18、tIdStr()StringBuilder s=new StringBuilder(25);foreach(bool b 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.Collection
19、s;四, 多个砖块信息类解决方案中添加InfoArr.cs类I .各个方块信息类private ArrayList info = 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;/由于使用到了MessageB
20、ox,要添加命名空间using System.Windows.Forms;由于使用到了Color类,还要添加using Syetem.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
21、;public Color BackColorgetreturn _backColor;set_backColor=value;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.GetExecutingAs
22、sembly();Stream sm=asm.GetManifestResourceStream(Tetris.BlockSet.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.ReadElementS
23、tring().Trim();else if (reader.Name =DownKey)_downKey=(Keys)Convert.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()
24、.Trim();else if (reader.Name =MoveRightKey)_moveRightKey=(Keys)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
25、(reader.ReadElementString().Trim();else if (reader.Name =CoorWidth)_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.ReadElementStri
26、ng().Trim();else if (reader.Name =BackColor)_backColor=Color.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();do
27、c.LoadXml();XmlNode root=doc.SelectSingleNode(BlockSet);for(int 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.InnerTex
28、t=(BlockInfo)infoi).GetColorStr();xelType.AppendChild(xelColor);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.
29、CreateElement(DropKey);xelDropKey.InnerText=Convert.ToInt32(_dropKey).ToString();xelKey.AppendChild(xelDropKey);XmlElement xelMoveLeftKey=doc.CreateElement(MoveLeftKey);xelMoveLeftKey.InnerText=Convert.ToInt32(_moveLeftKey).ToString();xelKey.AppendChild(xelMoveLeftKey);XmlElement xelMoveRightKey=doc
30、.CreateElement(MoveRightKey);xelMoveRightKey.InnerText=Convert.ToInt32(_moveRightKey).ToString();xelKey.AppendChild(xelMoveRightKey);XmlElement xelDeasilRotateKey=doc.CreateElement(DeasilRotateKey);xelDeasilRotateKey.InnerText=Convert.ToInt32(_deasilRotateKey).ToString();xelKey.AppendChild(xelDeasil
31、RotateKey);XmlElement xelContraRotateKey=doc.CreateElement(ContraRotateKey);xelContraRotateKey.InnerText=Convert.ToInt32(_contraRotateKey).ToString();xelKey.AppendChild(xelContraRotateKey);root.AppendChild(xelKey);/写界面信息XmlElement xelSurface=doc.CreateElement(Surface);XmlElement xelCoorWidth=doc.Cre
32、ateElement(CoorWidth);xelCoorWidth.InnerText= _coorWidth.ToString();xelSurface.AppendChild(xelCoorWidth);XmlElement xelCoorHeight=doc.CreateElement(CoorHeight);xelCoorHeight.InnerText= _coorHeight.ToString();xelSurface.AppendChild(xelCoorHeight);XmlElement xelRectPix=doc.CreateElement(RectPix);xelRe
33、ctPix.InnerText= _rectPix.ToString();xelSurface.AppendChild(xelRectPix);XmlElement xelBackColor=doc.CreateElement(BackColor);xelBackColor.InnerText=_backColor.ToArgb().ToString();xelSurface.AppendChild(xelBackColor);root.AppendChild(xelSurface);doc.Save(BlockSet.xml);六, 新建方块类解决方案中添加Block.cs类protecte
34、d Point structArr;protected int _xPos;protected int _yPos;protected 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 ind
35、exgetreturn structArrindex;public int Lengthgetreturn structArr.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.
36、Length;i+)temp=structArri.X;structArri.X=structArri.Y;structArri.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)*rectPi
37、x+1,(_yPos-p.Y)*rectPix+1,rectPix-2,rectPix-2);public virtual 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(Poin
38、t p in structArr)lock(gp)gp.FillRectangle(sb,PointToRect(p);七, 新建生产砖块的类解决方案中添加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;r
39、ectPix=config.RectPix;public Block GetABlock()Random rd=new Random();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+;ret
40、urn new Block(structArr,infokeyOrder.BColor,disapperColor,rectPix);八, 新建为砖块活动定规则的类在解决方案中添加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.Timers.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=pi
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026广东广州市招聘中山医学院医科公共平台技术员1人备考题库附答案详解
- 2026新疆和田墨玉县鸿源农业科技有限公司招聘备考题库附参考答案详解【夺分金卷】
- 2026太平洋证券有限责任公司招聘5人备考题库附答案详解【培优a卷】
- 超聚变数字技术股份有限公司2026届春季校园招聘备考题库【突破训练】附答案详解
- 工程现场安全检查表培训方案
- 2026河南郑州市郑东新区春华学校、郑州市郑东思贤学校招聘备考题库(能力提升)附答案详解
- 玻璃制造厂安全管理制度
- 2026中国国际工程咨询(北京)有限公司社会招聘5人备考题库含答案详解(研优卷)
- 2026黑龙江齐齐哈尔市克东县公益性岗位人员招聘60人备考题库含答案详解【模拟题】
- 2026陕西西安市高新第一学校招聘备考题库【典型题】附答案详解
- DB34∕T 5225-2025 风景名胜区拟建项目对景观及生态影响评价技术规范
- 急性心梗术后出血倾向的监测与护理干预
- 2026年苏州工业职业技术学院单招职业技能测试必刷测试卷附答案
- 2025年陕西省中考化学试题答案解读及备考指导课件
- 新市民课件教学课件
- GB/T 20013.1-2025核医学仪器例行试验第1部分:γ辐射计数系统
- 2025年甘肃省高考数学真题(新课标ⅱ卷)(含答案解析)
- 五年(2021-2025)高考生物真题分类汇编专题专题08 生物与环境(解析版)(河北专用)
- 前鼻韵母unvn课件
- 2025年政治法制素养题库及答案
- 中山市招投标管理办法
评论
0/150
提交评论