C#俄罗斯方块附代码.docx
- 文档编号:18149985
- 上传时间:2023-08-13
- 格式:DOCX
- 页数:55
- 大小:76.69KB
C#俄罗斯方块附代码.docx
《C#俄罗斯方块附代码.docx》由会员分享,可在线阅读,更多相关《C#俄罗斯方块附代码.docx(55页珍藏版)》请在冰点文库上搜索。
C#俄罗斯方块附代码
C#俄罗斯方块程序设计
姓名:
学号:
专业:
计算机科学与技术学院
班级:
级班
时间:
2009—2010年第一学期
该实验制作的是小游戏----俄罗斯方块
1.可实现以下基本功能:
用户可自定义添加或删除方块样式及颜色;
用户可自定义修改游戏背景颜色及按键设置。
2.另增加了几个功能:
按键设置改变后点击保存,会弹出对话框提示“保存成功”;
点击“开始”运行游戏,背景音乐自动播放,点击暂停后,背景音乐也随之停止;
每消除一行,会有特效声音提示消除成功;
根据消行多少会自动加分并显示。
游戏界面效果图如下:
配置窗体效果图如下:
砖块样式配置效果图如下:
游戏设计分为如下九个部分:
一,新建窗体“配置窗体”(TrmConfig)
添加TabControl控件
(1)砖块样式配置
.abel控件(lblMode)
点击“事件”,选择“Paint”
Graphicsgp=e.Graphics;
gp.Clear(Color.Black);
Penp=newPen(Color.White);
for(inti=31;i<155;i=i+31)
gp.DrawLine(p,1,i,155,i);
for(inti=31;i<155;i=i+31)
gp.DrawLine(p,i,1,i,155);
SolidBrushs=newSolidBrush(blockColor);
for(intx=0;x<5;x++)
{
for(inty=0;y<5;y++)
{
if(struArr[x,y])
{
gp.FillRectangle(s,31*x+1,31*y+1,30,30);
}
}
}
点击“事件”,选择“MouseClick”
privatebool[,]struArr=newbool[5,5];
privateColorblockColor=Color.Red;
--------------------------------------------------------
if(e.Button!
=MouseButtons.Left)
return;
intxPos,yPos;
xPos=e.X/31;
yPos=e.Y/31;
struArr[xPos,yPos]=!
struArr[xPos,yPos];
boolb=struArr[xPos,yPos];
Graphicsgp=lblMode.CreateGraphics();
SolidBrushs=newSolidBrush(b?
blockColor:
Color.Black);
gp.FillRectangle(s,31*xPos+1,31*yPos+1,30,30);
gp.Dispose();
.添加ColorDialog控件
添加label(lblColor)控件
点击“事件”,选择“click”
colorDialog1.ShowDialog();
blockColor=colorDialog1.Color;
lblColor.BackColor=colorDialog1.Color;
lblMode.Invalidate();
.添加listView控件(lsvBlockSet)
点击“事件”,选择“ItemSelectionChanged”
if(e.IsSelected)
{
blockColor=Color.FromArgb(int.Parse(e.Item.SubItems[1].Text));
lblColor.BackColor=blockColor;
strings=e.Item.SubItems[0].Text;
for(inti=0;i { struArr[i/5,i%5]=(s[i]=='1')? true: false; } lblMode.Invalidate(); } .“添加”按钮(btnAdd) boolisEmpty=false; foreach(booliinstruArr) { if(i) { isEmpty=true; break; } } if(! isEmpty) { MessageBox.Show("图案为空,请先用鼠标点击左边窗口绘制图案! ","提示窗口", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } StringBuildersb=newStringBuilder(25); foreach(booliinstruArr) { sb.Append(i? "1": "0"); } stringblockString=sb.ToString(); foreach(ListViewItemiteminlsvBlockSet.Items) { if(item.SubItems[0].Text==blockString) { MessageBox.Show("该图案已经存在! ","提示窗口", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } } ListViewItemmyItem=newListViewItem(); myItem=lsvBlockSet.Items.Add(blockString); myItem.SubItems.Add(Convert.ToString(blockColor.ToArgb())); .“删除”按钮(btnDel) if(lsvBlockSet.SelectedItems.Count==0) { MessageBox.Show("请在右边窗口选择一个条目进行删除! ","提示窗口", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } lsvBlockSet.Items.Remove(lsvBlockSet.SelectedItems[0]); btnClear.PerformClick(); .“清空”(btnClear) for(intx=0;x<5;x++) { for(inty=0;y<5;y++) { struArr[x,y]=false; } } lblMode.Invalidate(); .“修改”(btnUpdate) if(lsvBlockSet.SelectedItems.Count==0) { MessageBox.Show("请在右边窗口选择一个条目进行修改! ","提示窗口", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } boolisEmpty=false; foreach(booliinstruArr) { if(i) { isEmpty=true; break; } } if(! isEmpty) { MessageBox.Show("图案为空,请先用鼠标点击左边窗口绘制图案再进行修改! ","提示窗口", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } StringBuildersb=newStringBuilder(25); foreach(booliinstruArr) { sb.Append(i? "1": "0"); } lsvBlockSet.SelectedItems[0].SubItems[0].Text=sb.ToString(); lsvBlockSet.SelectedItems[0].SubItems[1].Text=Convert.ToString(blockColor.ToArgb()); (2)参数配置 .添加GroupBox1控件(gbKeySet)“键盘设置” .拖入六个label控件 .拖入六个TextBox控件(改名) 全部选中,选择“事件”,选择“KeyDown” if((e.KeyValue>=33&&e.KeyValue<=36)||(e.KeyValue>=45&&e.KeyValue<=46)|| (e.KeyValue>=48&&e.KeyValue<=57)||(e.KeyValue>=65&&e.KeyValue<=90)|| (e.KeyValue>=96&&e.KeyValue<=107)||(e.KeyValue>=109&&e.KeyValue<=111)|| (e.KeyValue>=186&&e.KeyValue<=192)||(e.KeyValue>=219&&e.KeyValue<=222)) { foreach(ControlcingbKeySet.Controls) { ControlTempC=casTextBox; 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(); ((TextBox)sender).Tag=(Keys)e.KeyValue; } .添加GroupBox2控件(gbEnvironmentSet)“环境设置” .拖入四个label控件 .拖入三个TextBox控件(改名) 一个label控件(lblBackColor) 选择“事件”,选择“click” colorDialog1.ShowDialog(); lblBackColor.BackColor=colorDialog1.Color; . .参数初始化设置 为配置窗体的代码窗口添加私有成员变量 privateConfigconfig=newConfig(); 初始化 config.LoadFromXmlFile(); InfoArrinfo=config.Info; ListViewItemmyItem=newListViewItem(); for(inti=0;i { myItem=lsvBlockSet.Items.Add(info[i].GetIdStr()); myItem.SubItems.Add(info[i].GetColorStr()); } 读快捷键及环境设置参数 txtDown.Text=((Keys)config.DownKey).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)config.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(); lblBackColor.BackColor=config.BackColor; .保存更改 选择“事件”,选择“click” 保存用户更改的设置 InfoArrinfo=newInfoArr(); foreach(ListViewItemiteminlsvBlockSet.Items) { info.Add(item.SubItems[0].Text,item.SubItems[1].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.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(); 二,信息保存 解决方案中添加BlockSet.Xml文件 三,一个砖块的信息类 解决方案中添加BlockInfo.cs类 privateBitArray_id; privateColor_bColor; publicBlockInfo(BitArrayid,ColorbColor) { _id=id; _bColor=bColor; } publicBitArrayID { get { return_id; } set { _id=value; } } publicColorBColor { get { return_bColor; } set { _bColor=value; } } publicstringGetIdStr() { StringBuilders=newStringBuilder(25); foreach(boolbin_id) { s.Append(b? "1": "0"); } returns.ToString(); } publicstringGetColorStr() { returnConvert.ToString(_bColor.ToArgb()); } 由于使用到了Color类,要添加命名空间 usingSyetem.Drawing; 由于使用了StringBuilder类以及BitArray类 usingSystem.Collections.Generic; -->usingSystem.Collections; 四,多个砖块信息类 解决方案中添加InfoArr.cs类 .各个方块信息类 privateArrayListinfo=newArrayList(); privateint_length=0; publicintLength { get { return_length; } } publicBlockInfothis[intindex] { get { return(BlockInfo)info[index]; } } publicstringthis[stringid] { set { if(value=="") { return; } for(inti=0;i { if(((BlockInfo)info[i]).GetIdStr()==id) { try { ((BlockInfo)info[i]).BColor=Color.FromArgb(Convert.ToInt32(value)); } catch(System.FormatException) { MessageBox.Show("颜色信息错误! 请删除BlockSet.xml文件,并重新启动程序","错误信息", MessageBoxButtons.OK, MessageBoxIcon.Error); } } } } } //由于使用到了ArrayList,要添加命名空间 usingSystem.Collections.Generic; -->usingSystem.Collections; //由于使用到了MessageBox,要添加命名空间 usingSystem.Windows.Forms; 由于使用到了Color类,还要添加 usingSyetem.Drawing; .添加字符转换成员方法 privateBitArrayStrToBit(stringid) { if(id.Length! =25) { thrownewSystem.FormatException("砖块样式信息不合法! 请删除BlockSet.xml文件,并重新启动程序"); } BitArrayba=newBitArray(25); for(inti=0;i<25;i++) { ba[i]=(id[i]=='0')? false: true; } returnba; } .添加砖块信息成员方法 publicvoidAdd(BitArrayid,ColorbColor) { if(id.Length! =25) { thrownewSystem.FormatException("砖块样式信息不合法! 请删除BlockSet.xml文件,并重新启动程序"); } info.Add(newBlockInfo(id,bColor)); _length++; } .对上面方法重载 publicvoidAdd(stringid,stringbColor) { Colortemp; if(! (bColor=="")) { temp=Color.FromArgb(Convert.ToInt32(bColor)); } else { temp=Color.Empty; } info.Add(newBlockInfo(StrToBit(id),temp)); _length++; } 五,新建配置类 解决方案中添加Config.cs类 privateKeys_downKey; privateKeys_dropKey; privateKeys_moveLeftKey; privateKeys_moveRightKey; privateKeys_deasilRotateKey; privateKeys_contraRotateKey; privateint_coorWidth; privateint_coorHeight; privateint_rectPix; privateColor_backColor; privateInfoArrinfo=newInfoArr(); .私有变量属性 #region私有变量相应的属性 publicKeysDownKey { get { return_downKey; } set { _downKey=value; } } publicKeysDropKey { get { return_dropKey; } set { _dropKey=value; } } publicKeysMoveLeftKey { get { return_moveLeftKey; } set { _moveLeftKey=value; } } public
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C# 俄罗斯方块 代码