C#打字游戏课程设计.docx
《C#打字游戏课程设计.docx》由会员分享,可在线阅读,更多相关《C#打字游戏课程设计.docx(17页珍藏版)》请在冰点文库上搜索。
C#打字游戏课程设计
C#打字游戏
程序核心代码主要部分:
设计程序流程图:
程序截图:
主窗体代码:
usingSystem;
usingSystem.Collections.Generic;
usingSystem.ComponentModel;
usingSystem.Data;
usingSystem.Drawing;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Windows.Forms;
//课程名称C#程序设计实践
//设计题目打字游戏
//专业计算机科学与技术
//班级
//学号
//姓名
//指导老师
namespaceTyping_Game
{
publicpartialclassFrmTyping:
Form
{
publicFrmTyping()
{
InitializeComponent();
}
publicintright=0;//正确个数计数
publicintwrong=0;//错误个数计数
publicintsum=0;//总个数技术
publicintcount=0;//按键总次数
publicfloataccuracy;//正确率
publicintMinute=1;//设置默认没局游戏时间
publicintminute;//设置游戏中的倒计时分
publicintsecond;//设置游戏中的倒计时秒
privatevoidFrmTyping_Load(objectsender,EventArgse)
{
}
//在状态栏中显示当前系统时间
privatevoidtimerSys_Tick(objectsender,EventArgse)
{
DateTimenow=DateTime.Now;
this.tsslSysTime.Text="系统时间:
"+now.Hour.ToString()+":
"+now.Minute.ToString()+":
"+now.Second.ToString()+'\t';
}
//开始&结束按钮
privatevoidtsmiStratOrOver_Click(objectsender,EventArgse)
{
if(tsmiStratOrOver.Text=="开始")
{
tsmiStratOrOver.Text="结束";
timerWord.Start();
timerGame.Start();
timerGT.Start();
//在游戏开始时暂停&继续按钮可用
tsmiPauseOrContinue.Enabled=true;
//在游戏未开始时选择游戏等级与设置游戏按钮无效
tsmiLevel.Enabled=false;
tsmiOption.Enabled=false;
//游戏开始初始化游戏数据
right=0;
wrong=0;
sum=0;
count=0;
minute=Minute;
second=0;
}
else
{
tsmiStratOrOver.Text="开始";
//在游戏未开始时暂停&继续按钮无效
tsmiPauseOrContinue.Enabled=false;
//在游戏未开始时可以选择游戏等级与设置游戏
tsmiLevel.Enabled=true;
tsmiOption.Enabled=true;
frmResultfrm=newfrmResult(this);
frm.Show();
}
}
//游戏暂停&继续功能实现
privatevoidtsmiPauseOrContinue_Click(objectsender,EventArgse)
{
if(tsmiPauseOrContinue.Text=="暂停")
{
tsmiPauseOrContinue.Text="继续";
timerWord.Enabled=false;
timerGame.Enabled=false;
timerGT.Enabled=false;
}
else
{
tsmiPauseOrContinue.Text="暂停";
timerWord.Enabled=true;
timerGame.Enabled=true;
timerGT.Enabled=true;
}
}
//退出程序
privatevoidtsmiExit_Click(objectsender,EventArgse)
{
Application.Exit();
}
//游戏等级为初级时
privatevoidtsmiLevelPrimary_Click(objectsender,EventArgse)
{
tsmiLevelPrimary.Checked=true;
tsmiLevelMidder.Checked=false;
tsmiLevelHigh.Checked=false;
timerGame.Interval=180;
timerWord.Interval=1800;
}
//游戏等级为中级时
privatevoidtsmiLevelMidder_Click(objectsender,EventArgse)
{
tsmiLevelPrimary.Checked=false;
tsmiLevelMidder.Checked=true;
tsmiLevelHigh.Checked=false;
timerGame.Interval=90;
timerWord.Interval=900;
}
//游戏等级为高级时
privatevoidtsmiLevelHigh_Click(objectsender,EventArgse)
{
tsmiLevelPrimary.Checked=false;
tsmiLevelMidder.Checked=false;
tsmiLevelHigh.Checked=true;
timerGame.Interval=50;
timerWord.Interval=500;
}
//跳出设置每局时间窗体
privatevoidtsmiSetTime_Click(objectsender,EventArgse)
{
frmSetTimefrm=newfrmSetTime(this);
frm.Show();
}
//跳出关于窗体
privatevoidtsmiAbout_Click(objectsender,EventArgse)
{
Aboutfrm=newAbout();
frm.Show();
}
//对打字游戏中字母的掉落
privatevoidtimerGame_Tick(objectsender,EventArgse)
{
foreach(Controlconinthis.Controls)
{
if(conisLabel)
{
if(con.Top>=this.Height-51)
{
con.Dispose();//当label掉落到窗体边框label消失
}
else
con.Top+=5;
}
}
}
//对打字游戏开始时不断随机生成的字母添加到新生成的label中并设置label的基本属性
privatevoidtimerWord_Tick(objectsender,EventArgse)
{
Randomr=newRandom();
inta=r.Next(65,90);//随机生成A~Z的ASCII码
charc=Convert.ToChar(a);//ASCII转换成字母
LabellalChar=newLabel();//生成新Label
lalChar.Text=c.ToString();//字母放入
//设置Label基本属性固定大小字体居中对齐等等...
lalChar.AutoSize=false;
lalChar.Height=51;
lalChar.Width=51;
lalChar.Left=r.Next(r.Next(0,this.Width/5-25),r.Next(this.Width-100,this.Width-51));
lalChar.Font=newFont("楷体",15,FontStyle.Regular);
lalChar.TextAlign=ContentAlignment.MiddleCenter;
//将Label加入到Controls中
this.Controls.Add(lalChar);
//每生成一个Label计入字母总数中
sum++;
//每生成一个Label都重新计算一次正确率
accuracy=(float)right/(2*sum)+(float)right/(2*count);
//状态栏中实时更新数据统计
tsslSum.Text="总个数为:
"+sum.ToString();
tsslAccuracy.Text="正确率为:
"+(accuracy*100).ToString()+"%";
}
//状态栏中的倒计时算法
privatevoidtimerGT_Tick(objectsender,EventArgse)
{
if(minute==0&&second==0)
{
frmResultfrm=newfrmResult(this);
frm.Show();
}
elseif(second==0)
{
minute-=1;
second=59;
}
else
second-=1;
//实时更新倒计时数据
tsslGameTime.Text="游戏剩余时间:
"+minute.ToString()+":
"+second.ToString();
}
//键盘输入对应的正确或错误的处理
privatevoidFrmTyping_KeyPress(objectsender,KeyPressEventArgse)
{
//每按下一个按键加入输入总数的计数
count++;
//boolt的值来判定输入的对错
boolt=false;
strings=e.KeyChar.ToString().ToUpper();
foreach(Controlconinthis.Controls)
{
if(conisLabel)
{
if(con.Text==s)
{
t=true;
right++;
con.Dispose();
break;
}
}
}
if(t==false)
wrong++;
//实时更新状态栏的数据
tsslRightNo.Text="正确个数:
"+right.ToString();
tsslWrongNo.Text="错误个数:
"+wrong.ToString();
accuracy=(float)right/(2*sum)+(float)right/(2*count);
tsslAccuracy.Text="正确率为:
"+(accuracy*100).ToString()+"%";
}
}
}
时间设置窗体代码:
usingSystem;
usingSystem.Collections.Generic;
usingSystem.ComponentModel;
usingSystem.Data;
usingSystem.Drawing;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Windows.Forms;
namespaceTyping_Game
{
publicpartialclassfrmSetTime:
Form
{
FrmTypingfrm;
publicfrmSetTime(FrmTypingfrm)
{
InitializeComponent();
this.frm=frm;
}
//当窗体跳出时textbox默认显示当前游戏的每局时间
privatevoidfrmSetTime_Load(objectsender,EventArgse)
{
textBox1.Text=frm.Minute.ToString();
}
//当textbox中内容发生变化时,对textbox中的内容做出判断如果不符合要求label显示提示错误的输入。
privatevoidtextBox1_TextChanged(objectsender,EventArgse)
{
lalPS.Text="";
btnOK.Enabled=true;
try
{
intm=Convert.ToInt32(textBox1.Text);
if(m<1||m>60)
{
lalPS.Text="请输入1~60的整数";
btnOK.Enabled=false;
}
}
catch(Exceptionex)
{
lalPS.Text="请输入1~60的整数";
btnOK.Enabled=false;
}
}
//“确定”后数据返回到主窗体从而改变每局时间
privatevoidbtnOK_Click(objectsender,EventArgse)
{
frm.Minute=int.Parse(textBox1.Text);
this.Close();
}
//“取消”
privatevoidBtnCancel_Click(objectsender,EventArgse)
{
this.Close();
}
}
}
成绩窗体代码:
usingSystem;
usingSystem.Collections.Generic;
usingSystem.ComponentModel;
usingSystem.Data;
usingSystem.Drawing;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Windows.Forms;
namespaceTyping_Game
{
publicpartialclassfrmResult:
Form
{
FrmTypingfrm;
publicfrmResult(FrmTypingfrm)
{
InitializeComponent();
this.frm=frm;
}
//按下"确定"键后原有面板上的显示数据全部清空
privatevoidbutton2_Click(objectsender,EventArgse)
{
foreach(Controlconinfrm.Controls)
{
if(conisLabel)
{
con.Visible=false;
}
}
this.Close();
frm.right=0;
frm.sum=0;
frm.wrong=0;
frm.accuracy=0;
frm.tsslAccuracy.Text="";
frm.tsslRightNo.Text="";
frm.tsslWrongNo.Text="";
frm.tsslGameTime.Text="";
frm.tsslSum.Text="";
frm.tsmiLevel.Enabled=true;
frm.tsmiOption.Enabled=true;
}
//当该窗体跳出时显示游戏得分等情况同时计时器全部停止
privatevoidfrmResult_Load(objectsender,EventArgse)
{
frm.timerWord.Stop();
frm.timerGame.Stop();
frm.timerGT.Stop();
lblLevel.Text=(frm.tsmiLevelPrimary.Checked?
frm.tsmiLevelPrimary.Text:
(frm.tsmiLevelMidder.Checked?
frm.tsmiLevelMidder.Text:
frm.tsmiLevelHigh.Text));
lblSum.Text=frm.sum.ToString();
lblRight.Text=frm.right.ToString();
lblWrong.Text=frm.wrong.ToString();
lblAccuracy.Text=(frm.accuracy*100).ToString()+"%";
if(frm.minute==0&&frm.second==0)
lblTime.Text=frm.Minute.ToString()+":
00";
else
lblTime.Text=(frm.Minute-frm.minute-1).ToString()+":
"+(60-frm.second).ToString();
}
}
}
(注:
可编辑下载,若有不当之处,请指正,谢谢!
)