[最新]九宫格游戏
重庆交通大学计算机与信息
学院
综合性
设计
领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计
性
实验报告
化学实验报告单总流体力学实验报告观察种子结构实验报告观察种子结构实验报告单观察种子的结构实验报告单
学 生 姓 名: 谢滨宇
学 生 学 号: 10060422
班 级: 计科 专业 2010 级 4 班
实验项目名称: 九宫格游戏
实验所属课程: C#
实验室(中心): 软件与通信实验中心
指 导 教 师 : 徐毅
完 成 时 间: 2012 年 6 月 9 日
一 实验目的
1. 熟悉C#的基础操作。
2. 通过程序掌握C#的操作环境。
3. 学会做好C#的简单程序
二 实验内容
本程序通过VS2010建立窗体应用程序,通过控件建立九宫格游戏窗口:
开始时1-9格黄橘两色随机分布,按动一个键,周围颜色会转换为相反色,使5键为黄色,其余键为橘色,则游戏过关,具体规则如下:
1. 按动1键,则1,2,4,5键颜色变反;按动3,7,9键同理。
2. 按动2键,则1,2,3键颜色变反;按动4,6,8键同理。
3. 按动5键,则2,4,5,6,8键颜色变反。
当成功后游戏停止。
本游戏中预先设置按钮颜色以便更快达到游戏成功,能用来检验游戏的可操作性。
三 设计思路
本实验在Microsoft Visual Studio 2010环境中运行,建立相关控件,游戏时使按键数字参与内部函数的计算,当按键颜色符合时游戏成功并停止记时。另外设置开始,暂停,退出,清空,帮助键以供用户更好操作,详情请查看代码。
四 设计代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace cs_nineplay
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
Color OnColor = Color.Coral;//橘色变量
Color OffColor = Color.Yellow;//黄色变量
int seconds1,seconds2=999;//当前时间和上一次
记录
混凝土 养护记录下载土方回填监理旁站记录免费下载集备记录下载集备记录下载集备记录下载
的事件(开始时默认为999)
int count1,count2=999;//同理
int[,] ChangeCells ={{-1,-1,-1,-1,-1},
{1,2,4,5,-1},
{2,1,3,-1,-1},
{3,2,5,6,-1},
{4,1,7,-1,-1},
{5,2,4,6,8},
{6,3,9,-1,-1},
{7,4,5,8,-1},
{8,7,9,-1,-1},
{9,5,6,8,-1}
};//用于规则变化
Button[] Buttons = new Button[10];
int num = 0;//当前记录的项数
struct TM//记录的时间的次数的结构体
{
public int Time, Times;
}
TM[] tm = new TM[100];//记?录?
private void Button_Click(object sender, EventArgs e)
{
Button btnHit = (Button)sender;//把当前按钮赋给btnHit
int No = int.Parse(btnHit.Text);//取当前按钮的数字
for (int i = 0; i < 5; i++)
{
int X = ChangeCells[No, i];
if (X != -1)//改变按钮相关颜色
{
if (Buttons[X].BackColor == OffColor)
Buttons[X].BackColor = OnColor;
else
Buttons[X].BackColor = OffColor;
}
}
count1 += 1;//次数加1
lblCount.Text = "次ä?数ºy:êo" + count1.ToString() + "次ä?";
int sum = 0;//记录黄色键的数量
for (int i = 1; i <= 9; i++)
{
if (Buttons[i].BackColor == OnColor)
sum += 1;
}
if (sum == 8 && Buttons[5].BackColor == OffColor)//游戏成功
{
btnStart.Enabled = true;
btnStop.Enabled = false;
tmrTime.Enabled = false;
btnStart.Text = "开a始º?";
Clear.Enabled = true;
?ì喜2~ê?过y关?...."); MessageBox.Show("恭
for (int i = 1; i <= 9; i++)
Buttons[i].Enabled = false;
if (seconds2 > seconds1 || seconds2 == seconds1 && count2 > count1)//创造新纪录
{
cbxTime.SelectedIndexChanged -= new
EventHandler(cbxTime_SelectedIndexChanged);//使当前显示时间的
改变不触发此事件
cbxTimes.SelectedIndexChanged -= new
EventHandler(cbxTimes_SelectedIndexChanged);//同理
cbxTime.Text = seconds1.ToString();
cbxTimes.Text = count1.ToString();
cbxTime.Items.Add(seconds1);
cbxTimes.Items.Add(count1);
tm[num].Time = seconds1;
tm[num].Times = count1;
num++;
seconds2 = seconds1; count2 = count1;//保留上次记录
JL.Text = "新?纪?ª录?";
}
cbxTime.SelectedIndexChanged += new
EventHandler(cbxTime_SelectedIndexChanged);//恢复触发事件
cbxTimes.SelectedIndexChanged += new
EventHandler(cbxTimes_SelectedIndexChanged);
}
}
private void Form1_Load(object sender, EventArgs e)
{
Clear.Enabled = false;
btnStart.Enabled = true;
btnStop.Enabled = false;
button1.Click += new EventHandler(Button_Click);//关联函数
button2.Click += new EventHandler(Button_Click);
button3.Click += new EventHandler(Button_Click);
button4.Click += new EventHandler(Button_Click);
button5.Click += new EventHandler(Button_Click);
button6.Click += new EventHandler(Button_Click);
button7.Click += new EventHandler(Button_Click);
button8.Click += new EventHandler(Button_Click);
button9.Click += new EventHandler(Button_Click);
Buttons[1] = button1;//关联按钮
Buttons[2] = button2;
Buttons[3] = button3;
Buttons[4] = button4;
Buttons[5] = button5;
Buttons[6] = button6;
Buttons[7] = button7;
Buttons[8] = button8;
Buttons[9] = button9;
for (int i = 1; i <= 9; i++)
Buttons[i].Enabled = false;
}
private void btnStart_Click(object sender, EventArgs e)
{
JL.Text = "";
if (seconds2 != 999)
{
cbxTime.SelectedIndexChanged -= new
EventHandler(cbxTime_SelectedIndexChanged);
cbxTimes.SelectedIndexChanged -= new
EventHandler(cbxTimes_SelectedIndexChanged);
cbxTime.Text = seconds2.ToString();//先是上次记录的时间
cbxTimes.Text = count2.ToString();//先是上次记录的次数
cbxTime.SelectedIndexChanged += new
EventHandler(cbxTime_SelectedIndexChanged);
cbxTimes.SelectedIndexChanged += new
EventHandler(cbxTimes_SelectedIndexChanged);
}
tmrTime.Enabled = false;//时钟暂时停止
string Message = "是º?否??重?新?开a始º??";
string Cap = "重?新?开a始º?";
DialogResult result=DialogResult.Yes;
if (btnStart.Text == "重?新?开a始º?")//显示警告框以供确定
result=MessageBox.Show(Message, Cap, MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2);
if (result == DialogResult.Yes)//按确定时
{
btnStart.Text = "重?新?开a始º?";
Y停ª?ê"; btnStop.Text = "暂
tmrTime.Enabled = true;
count1 = 0;//此时记录的时间清零
seconds1 = 0;//此时记录的次数清零
lblCount.Text = "次ä?数ºy:êo" + count1.ToString() + "次ä?";
lblTime.Text = "秒?数ºy:êo" + seconds1.ToString() + "秒?";
Random r = new Random();/随机数
/*for (int i = 1; i <= 9; i++)//随即设置按钮的颜色
{
Buttons[i].Enabled = true;
if (r.Next(1, 10) > 5)
Buttons[i].BackColor = OnColor;
else
Buttons[i].BackColor = OffColor;
}*/
for (int i = 1; i <= 9; i++)
Buttons[i].Enabled = true;
Buttons[1].BackColor = OnColor;//为便于检验,预先设置颜色
Buttons[2].BackColor = OnColor;
Buttons[3].BackColor = OffColor;
Buttons[4].BackColor = OnColor;
Buttons[5].BackColor = OffColor;
Buttons[6].BackColor = OffColor;
Buttons[7].BackColor = OffColor;
Buttons[8].BackColor = OffColor;
Buttons[9].BackColor = OffColor;
tmrTime.Enabled = true;
btnStart.Enabled = true;
btnEnd.Enabled = true;
btnStop.Enabled = true;
}
else tmrTime.Enabled = true;
Clear.Enabled =false;
}
private void btnEnd_Click(object sender, EventArgs e)
{
string Message = "是º?否??退ª?出??";
string Cap = "退ª?出?";
DialogResult result;
bool Ena = tmrTime.Enabled;
tmrTime.Enabled = false;
result = MessageBox.Show(Message, Cap, MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2);//警告对话框?
if (result == DialogResult.Yes) Application.Exit();
else tmrTime.Enabled = Ena;//按否时时钟恢复原始状态
}
private void tmrTime_Tick(object sender, EventArgs e)
{
seconds1 += 1;//时间累加1
lblTime.Text = "秒?数ºy:êo" + seconds1.ToString() + "秒?";
}
private void button10_Click(object sender, EventArgs e)
{
MessageBox.Show("\t开a始º?时º?À1-9格?黄?橘???两??色??随?机??分??布?,ê?按ã?ä动??一??个?键??,ê?周??围?ì的Ì?键??颜?色??会??转Áa变À?为a相??反??ä色??,ê?使º15键??为a黄?色??,ê?其?余???键??为a橘???色??,ê?则??游??戏??过y关?。?ê具?体??规?则??如??下?:êo\n\t(1)按ã?ä动??1键??,ê?则??1,ê?2,ê?4,ê?5键??
颜?色??变À?反??ä;ê?按ã?ä动??3,ê?7,ê?9键??同ª?理??ª\n\t(2)按ã?ä动??2键??,ê?则??1,ê?2,ê?3键??颜?色??变À?反??ä;ê?按ã?ä动??4,ê?6,ê?8键??同ª?理??ª\n\t(3)按ã?ä动??5键??,ê?则??2,ê?4,ê?5,ê?6,ê?8键??颜?色??变À?反??ä");
//帮助的说明
}
private void btnStop_Click(object sender, EventArgs e)
{
if (btnStop.Text == "暂Y停ª?ê")//暂停
{
btnStop.Text = "继??续?";
for (int i = 1; i <= 9; i++)
Buttons[i].Enabled = false;
tmrTime.Enabled = false;//时钟停止
btnStart.Enabled = false;
}
else//继续
{
btnStop.Text = "暂Y停ª?ê";
for (int i = 1; i <= 9; i++)
Buttons[i].Enabled = true;
tmrTime.Enabled = true;//时钟恢复计时
btnStart.Enabled = true;
}
}
private void cbxTime_SelectedIndexChanged(object sender, EventArgs e)//供用户选择列表框中时间时,cbxTimes框中先是对应次数
{
cbxTimes.Text = tm[cbxTime.SelectedIndex].Times.ToString();
}
private void cbxTimes_SelectedIndexChanged(object sender, EventArgs e)//同理ª
{
cbxTime.Text = tm[cbxTimes.SelectedIndex].Time.ToString();
}
private void Clear_Click(object sender, EventArgs e)//清空
{
if (btnStart.Enabled == true && btnStart.Text == "开a始º?")
{
seconds2 = 999; count2 = 999;//恢复初始时的状态
cbxTime.Text = "";//清空时间
cbxTimes.Text = "";//清空次数
tm = new TM[100];
num = 0;
cbxTime.Items.Clear();//清空列表框中的时间
cbxTimes.Items.Clear();//清空列表框中的次数
MessageBox.Show("记?录?已??清?空?!");
}
}
}
}
五 实验结果
开始游戏前:
游戏中:
成功时:
创造新纪录时:
六 实验心得
在程序中,要建立这么多的函数,而有些函数间的数据相关联,往往一步错步步错,所以设计实验时要千万小心,一个字母的错误有时就能牵住你几分钟,甚至编译没错但运行结果不尽人意。所以逻辑要严密,马虎不得。另外在写程序中要保持相当的细心与耐心,仔细分析错误,一点一点检查并修改,直到程序运行成功。 七 参考资料