c++设计一个简单的打字游戏

合集下载

简单打字游戏代码

简单打字游戏代码

sum=sum-100;
}
try {
Thread.sleep(10);
} catch (Exception e) {}
ቤተ መጻሕፍቲ ባይዱ
}
}
}
public void keyPressed(KeyEvent e) {
y[i] = (int) (Math.random() * 300);
c[i] = (char) (Math.random() * 26 + 97);
}
}
public void paint(Graphics g) {
g.setColor(Color.WHITE);
}else{
sum-=100;
}
}
public void keyReleased(KeyEvent arg0) {
// TODO Auto-generated method stub
}
public void keyTyped(KeyEvent arg0) {
Frame w = new Frame();
w.setSize(300, 400);
w.setBackground(Color.BLACK);
MyPanel2 mp = new MyPanel2();
w.add(mp);
Thread t = new Thread(mp);
// TODO Auto-generated method stub
}
}
Font f=new Font ("",Font.BOLD,20);
g.setFont(f);
for (int i = 0; i < 10; i++) {

打字游戏

打字游戏

湖南农业大学东方科技学院课程设计报告课程名称:微机原理与接口技术设计题目:打字游戏程序设计学生姓名:罗英杰学号: 2年级专业:2008级计算机科学与技术班级: 3 班指导老师:王兴波学院:东方科技学院湖南·长沙提交日期:2009年12月一、任务与要求1. 开始界面的提示信息:进入游戏,退出2. 打字游戏:字母从屏幕上方下落,若用户在字母下落过程中输入正确字母,字母消失,输入不正确,字母继续下落3. 空格键退出游戏二、分析与规划1、结构分析图,如下2、布局分析:首先,出现菜单主界面起到提示作用。

然后进入游戏,接着完成游戏的退出。

三、实现过程1、出现菜单主界面:ZK db "WELCOME TO PLAY$"no db "shejiren: Luo Yingjie 2009/12/09 $"meg db "press Enter key to continue.......$"meg1 db "when a letter is dropping,please hit it!$"meg2 db "press space key to pause!$"meg3 db "press ESC key to return main interface!$"meg4 db "press letter 'E' to exit!$"上面的代码菜单主界面的内容clear_screen 00d,00d,24d,79dInit_game 00d,00d,0ah,dl,80d,nextsign1 Init_game 24d,00d,0ah,dl,80d,nextsign2Init_game 00d,00d,0ah,dh,25d,nextsign3Init_game 00d,79d,0ah,dh,25d,nextsign4menu 05d,15d,ZK ;菜单信息的宏调用menu 07h,15d,nomenu 09d,15d,megmenu 11d,15d,meg1menu 13d,15d,meg2menu 15d,15d,meg3menu 17d,15d,meg4clear_screen 01d,01d,23d,78d ;清屏宏调用clear_screen 01d,01d,23d,78dInit_game 23d,01d,01h,dl,78d,nextsign5mov ah,02hmov bh,00hmov dh,01hmov dl,01hint 10hmov cx,00hlea si,letterscmp al,1bh ;如果键入ESC,则返回主菜单to_start1: ;返回主菜单jmp start上面代码是解决怎样使主界面输出的2、游戏界面的实现:speed dw 600dletters db "jwmilzoeucgpravskntxhdyqfb"db "iytpkwnxlsvxrmofzhgaebudjq"db "nwimzoexrphysfqtvdcgljukda"letters_bak db "jwmilzoeucgpravskntxhdyqfb" db "iytpkwnxlsvxrmofzhgaebudjq" db "nwimzoexrphysfqtvdcgljukda" letter_counter db 0life_flag db 78 dup(0)position_flag db 78 dup(0)present_position db 1以上代码是字母的排列及出现的顺序init_postion_flag:mov [si],ahinc siinc cxcmp cx,78djne init_postion_flaglea di,letterslea si,letters_bakmov cx,00hinit_letters:mov ah,[si]mov [di],ahinc siinc diinc cxcmp cx,78djne init_lettersmov ah,00hlea si,life_flagmov cx,00hinit_life_flag:mov [si],ahinc siinc cxcmp cx,78djne init_life_flagmov cx,00hmov ah,01hor ch,00010000bint 10hput: mov ah,02h ;设置光标位置mov bh,00hmov dh,22dmov dl,33dint 10hmov ah,01h ;从键盘输入任意字符 int 21hcmp al,0dhje speed3cmp al,45hje exitexit: mov ah,4chint 21hspeed3: mov ax,speed+12mov speed,axjmp beginnextletter:mov ah,02h ;显示字母 mov dl,[si]int 21hinc siinc cxcmp cx,78dje nextcyclejmp nextletterfrom_front:sub present_position,78djmp gobackto_sifind_zero:cmp letter_counter,78dje recyclecmp present_position,78dje from_onemov ah,00hnextsi: add present_position,01hinc sicmp [si],ahje gobackto_dicmp present_position,78dje from_onejmp nextsifrom_one:mov present_position,01hjmp gobackto_sirecycle:mov letter_counter,00hmov present_position,01dlea si,position_flagmov cx,00hmov ah,00hclearsi: mov [si],ahinc cxcmp cx,78dje nextcycleinc sijmp clearsinextcycle:lea di,letterslea si,position_flagadd present_position,31dcmp present_position,78ja from_frontgobackto_si:add si,word ptr present_position dec simov ah,[si]cmp ah,01hje find_zerogobackto_di:mov ah,01hmov [si],ahadd di,word ptr present_positiondec dimov dl,present_positionmov ah,02hmov bh,00hmov dh,01hint 10hmov cx,00hnextrow: push cxmov cx,00hout_cycle: ; 延迟push cxmov cx,00hin_cycle:add cx,01hcmp cx,1000jne in_cyclepush dxmov ah,06h ;从键盘输入字符mov dl,0ffhint 21hpop dxjz passcmp al,[di] ;输入字母正确!则字母消失 je disappearpass: pop cxinc cxcmp cx,speedje printjmp out_cyclepause: push dx ;暂停处理mov ah,06hmov dl,0ffhint 21hpop dxcmp al," "jne pausejmp passto_start1: ;返回主菜单jmp startprint:mov ah,0ah ;在当前光标位置写空格 mov al," "mov bh,00hmov cx,01hint 10hinc dhmov ah,02h ;改变光标位置mov bh,00hint 10hmov ah,0ah ;在当前光标位置写字母 mov al,[di]mov bh,00hmov cx,01hint 10hpop cxinc cxcmp cx,21dje print_next_letterjmp nextrow ;下一行disappear: ;击中字母后输出空格 pop cxpop cxmov ah,0ahmov al," "mov bh,00hmov cx,01hint 10hjmp hitprint_next_letter:lea si,life_flagadd si,word ptr present_position dec simov ah,0ahmov al," "mov bh,00hmov cx,01hint 10hinc dhmov ah,02hmov bh,00hint 10hmov ah,0ahmov al," "mov bh,00hmov cx,01hint 10hmov ah,1mov [si],ahmov bh,00hmov dh,01hmov dl,present_positionint 10hmov al,[di] ; 出现下一个新字母的数法 add al,7cmp al,7ahja convey_lettermov ah,0ahmov bh,00hmov cx,01hint 10hmov [di],aladd letter_counter,01hjmp nextcycleconvey_letter:sub al,7ahadd al,61hmov ah,0ahmov bh,00hmov cx,01hint 10hmov [di],aladd letter_counter,01hjmp nextcycleclear_screen 01,01,23,78mov ah,02hmov bh,00hmov dh,11dint 10hinc dhinc dhmov ah,02hmov bh,00hint 10hnotkey:mov ah,07hint 21hcmp al,0dhje to_startcmp al,1bhje overjmp notkeyto_start:clear_screen 00,00,24,79jmp startover: clear_screen 01,01,23,78 mov ah,02hmov bh,00hmov dh,11dmov dl,15hint 10hmov ah,02hmov bh,00hmov dh,13dmov dl,15hint 10hmov ah,07hint 21hmov ah,07hint 21hclear_screen 00,00,24,79 mov ax,4c00hint 21h以上代码是实现游戏的所有代码四、实现的效果1、主界面实现的效果:2、游戏实现的效果:五、结束语在这次课程设计中,通过做打字游戏程序的设计,熟练掌握了编写汇编语言源程序的基本方法和框架;并能熟练编写顺序结果、分支结构和循环结构的汇编程序,而且还掌握了子程序的编写和使用的方法。

简单打字游戏编程

简单打字游戏编程

简单打字游戏编程字数:1500字随着计算机技术的迅速发展,各种各样的游戏应运而生,其中打字游戏是一类经典且受欢迎的游戏类型。

在这篇文章中,我将介绍一个简单的打字游戏的编程实现,带领读者一起学习如何利用编程语言来开发一个简易的打字游戏。

在开始之前,我们首先需要确定使用的编程语言。

在本篇文章中,我将使用Python语言来进行游戏的开发。

Python是一种易于学习和使用的编程语言,非常适合初学者。

编写打字游戏的代码之前,请确保你已经安装了Python,并且具备基本的编程知识。

首先,我们需要为游戏设计一个基本的界面。

在这个游戏中,我们将在屏幕上显示一个随机的英文单词,并要求玩家尽快输入正确的单词。

为了实现这个功能,我们需要使用Python的一个叫做`random`的模块来生成随机单词。

下面是一个简单的代码示例:```pythonimport randomdef generate_word():words = ['apple', 'banana', 'cat', 'dog', 'elephant'] # 可以根据需要扩展单词列表return random.choice(words)if __name__ == '__main__':word = generate_word()print(word)```在上面的代码中,`generate_word`函数用于生成一个随机的单词。

我们事先定义了一个单词列表`words`,其中包含了一些常见的英文单词。

然后,使用`random.choice`函数从这个列表中随机选择一个单词,并将其返回。

在主程序部分,我们调用`generate_word`函数并打印生成的单词。

接下来,我们需要实现游戏的主循环。

在游戏开始后,程序会不断生成新的单词,并等待玩家输入。

玩家需要尽快输入正确的单词,否则游戏将结束。

1C#打字游戏代码(初学者易懂)

1C#打字游戏代码(初学者易懂)

} } private void 退出ToolStripMenuItem_Click(object sender, EventArgs e) { if (DialogResult.Yes == MessageBox.Show(" 确 认 结 束 吗 [Y/N]", " 一 个 结 束 确 认 窗 口 ", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2)) { Application.Exit(); } } private void 提示ToolStripMenuItem_Click(object sender, EventArgs e) { MessageBox.Show("打字练习"); } private void 击字字数ToolStripMenuItem_Click(object sender, EventArgs e) { MessageBox.Show(all.ToString()); } private void 正确数ToolStripMenuItem_Click(object sender, EventArgs e) { MessageBox.Show(right.ToString()); } private void 错误数ToolStripMenuItem_Click(object sender, EventArgs e)
using System; using System.Collections.Generic; using ponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace WindowsApplication2 { public partial class Form1 : Form { int right = 0,all = 0, a = 0;

六年级信息技术有趣的打字练习游戏课时设计

六年级信息技术有趣的打字练习游戏课时设计
今天我们首先来练习比较容易的“键位练习”。教师指导纠正指法。利用《金山打字通》软件形象生动的演示指法要领。
点击进入“金山打字通”的主画面后,用鼠标选择一个项目中,然后选择弹出菜单中的某一项,就可以开始打字练习了。
学生了解指法位置和击键方法。
学生利用键盘的指法位置和指法口诀进行打字练习。
上机练习。(30分钟) 上机内容:
3、继续练习,尽量做到盲打,
4、学生汇报成果。速度,准确率。
学生参与小结
作业布置
用一分钟的时间快速打字,组内比一比谁的速度和准确率最高。




《金山打字通》的使用
——有趣的打字练习游戏
指法位置
指法口诀
快速盲打
教学后记
替换一种软件进行练习,可以提高学生的兴趣。用打字游戏延伸学生的学习兴趣,(经过一定的字母键练习之后,再引入深受学生欢迎的打字游戏,使学生在玩中得到练习和提高,延伸学生的学习兴趣,整个学习的氛围变得轻松愉快。)化枯燥为有趣。(运用学生多种感官的参与和生动丰富的教学方式,调动小学生学习打字的兴趣,使学生从情感上乐于参与,产生乐学、爱学、主动去学的愿望,使枯燥单调的指法练习变得丰富生动。)
六年级信息技术有趣的打字练习游戏课时设计
课题
《金山打字通》的使用
课型
上机课
教ቤተ መጻሕፍቲ ባይዱ目标
1、学会使用“金山打字通”软件。
2、通过游戏掌握正确的方法。
教材
分析
重点
正确的指法、熟练的输入。
难点
正确的指法、熟练的输入。
教具
每人一台计算机
教学步骤
教师活动
学生活动
一、导入
二、新授
三、学生练习
问:基准键是哪几个?分别对应哪个手指?打字的正确姿势是什么呢,同学们做一做,复习巩固打字的姿势。今天我们继续进行指法练习,不过我们今天继续学习用《金山打字通》软件来练习,熟练了以后,我们还可以在里面玩游戏哦!

C#实现打字小游戏

C#实现打字小游戏

C#实现打字⼩游戏本⽂实例为⼤家分享了C#实现打字⼩游戏的具体代码,供⼤家参考,具体内容如下using System;using System.Drawing;using System.Windows.Forms;namespace 打字游戏{public partial class Form1 : Form{public Form1(){InitializeComponent();}//创建飞机PictureBox plan = new PictureBox();Button kaiguan = new Button();Timer flytime = new Timer();//动画事件//创建的得分的labelLabel df = new Label();int x = 0;//实例化⾎条Label xt = new Label();Label xt1 = new Label();int xuetiao = 150;int dl = 0;//产⽣字母private void Form1_Load(object sender, EventArgs e){this.KeyPreview = true;//游戏区域this.WindowState = FormWindowState.Maximized;this.Text = "打字游戏";panel1.Size = new Size(1000, 760);panel1.BackColor = Color.White;timer1.Start();bird.Tag = "b";bird.Width = 229;bird.Height = 111;bird.SizeMode = PictureBoxSizeMode.StretchImage;//panel1.Controls.Add(bird);bird.Image = imageList1.Images[0];flytime.Interval = 80;//事件的添加:+、=、tab、tab;flytime.Tick += Flytime_Tick;plan.Tag = "plan";plan.Size = new Size(100, 100);////plan.BackColor = Color.Red;plan.Location = new Point(panel1.Width / 2 - plan.Width / 2, panel1.Height - plan.Height); plan.Image = Image.FromFile(@"../../img/BP03.png");panel1.Controls.Add(plan);kaiguan.Text = "开始游戏";kaiguan.Location = new Point(1200,300);this.Controls.Add(kaiguan);kaiguan.Click += Kaiguan_Click;}private void Kaiguan_Click(object sender, EventArgs e){if (kaiguan.Text=="开始游戏"){flytime.Start();timer2.Start();timer3.Start();kaiguan.Text = "暂停游戏";}else if (kaiguan.Text=="暂停游戏"){flytime.Stop();timer2.Stop();timer3.Stop();kaiguan.Text = "开始游戏";}//得分栏df.Size = new Size(130, 20);df.Location = new Point(1138, 210);df.Tag = "df";df.Text = "得分:0分";df.AutoSize = true;this.Controls.Add(df);//⾎条栏xt.Size = new Size(130,20);xt.Location = new Point(1200,500);xt.BackColor = Color.White;xt1.Size = new Size(130,20);xt1.Location=new Point(1200,500);xt1.BackColor = Color.Red;xt.Tag = "xt";xt1.Tag = "xt1";this.Controls.Add(xt);this.Controls.Add(xt1);}PictureBox bird = new PictureBox();//显⽰动画的容器;//动画事件int index = 0;private void Flytime_Tick(object sender, EventArgs e){index++;bird.Image = imageList1.Images[index];if (index >= 10){index = -1;}Random r = new Random();//鸟的移动private void timer2_Tick(object sender, EventArgs e){bird.Left += 2;if (bird.Left >= panel1.Width){bird.Left = -bird.Width;}}//字母⽣成private void timer1_Tick_1(object sender, EventArgs e){if (bird.Left >= 0 && bird.Left <= panel1.Width - bird.Width){//每⼀个lebel是⼀个字母;Label lb = new Label();lb.Text = ((char)r.Next(97, 123)).ToString();lb.Font = new Font("", r.Next(20, 40));lb.Tag = "lb";lb.AutoSize = true;lb.ForeColor = Color.FromArgb(r.Next(255), r.Next(255), r.Next(255));lb.Top = bird.Height;lb.Left = bird.Left + bird.Width / 2 - lb.Width / 2;panel1.Controls.Add(lb);}}//字母下落private void timer3_Tick(object sender, EventArgs e){//遍历循环语法foreach (Control item in panel1.Controls){//每⼀个对象都有⼀个⽅法GetTypeif (item.GetType().Name == "Label"){item.Top += 3;if (item.Top >= panel1.Height){item.Dispose();xuetiao -= 10;xt.Width = xuetiao;dl++;if (xt.Width==0){flytime.Stop();timer2.Stop();timer3.Stop();MessageBox.Show("Game over");}}}if(item.GetType().Name== "PictureBox"){if (item.Tag.ToString()=="zd"){item.Top -= 7;if (item.Top+item.Height<=-item.Height){item.Dispose();}foreach (Control ad in panel1.Controls){if (ad.Tag.ToString()=="lba"){if (ad.Top+ad.Height>=item.Top&&item.Left==ad.Left+ad.Width/2-item.Width/2) {item.Dispose();ad.Dispose();x += 10;df.Text = x.ToString()+"分";PictureBox baz = new PictureBox();//装播放爆炸图⽚的盒⼦;baz.Tag = 0;baz.Image = imageList2.Images[0];baz.Size = new Size(90,90);baz.SizeMode = PictureBoxSizeMode.StretchImage;baz.Location = new Point(ad.Left + ad.Width / 2 - baz.Width/2,ad.Top+ad.Height/2-baz.Height/2) ; panel1.Controls.Add(baz);Timer bofang = new Timer();bofang.Start();bofang.Interval = 60;bofang.Tag = baz;bofang.Tick += Bofang_Tick;;}}}}}}}private void Bofang_Tick(object sender, EventArgs e){Timer mnb = (Timer)sender;PictureBox picture = (PictureBox)mnb.Tag;picture.Image = imageList2.Images[(int)picture.Tag];picture.Tag = (int)picture.Tag + 1;if ((int)picture.Tag>=31){picture.Dispose();mnb.Dispose();}}//按键消除private void Form1_KeyPress(object sender, KeyPressEventArgs e){//在按下任意按键的时候,判断⼀下本次按键值是否有对应的字母;//按键键值//被动⾏为foreach (Control item in panel1.Controls){if (item.GetType().Name == "Label"){if (item.Text == e.KeyChar.ToString()&&item.Tag.ToString()=="lb"){item.Tag = "lba";plan.Left = item.Left + item.Width / 2 - plan.Width / 2;//创建⼦弹PictureBox bullet = new PictureBox();bullet.Tag = "zd";bullet.Size = new Size(6,20);bullet.Image = Image.FromFile(@"../../img/Ammo4.png");bullet.Location = new Point(plan.Left + plan.Width / 2 - bullet.Width / 2, plan.Top - bullet.Height);bullet.SizeMode = PictureBoxSizeMode.StretchImage;panel1.Controls.Add(bullet);return;}}}}}}以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。

c打字游戏课程设计报告

c打字游戏课程设计报告

c打字游戏课程设计报告一、课程目标知识目标:1. 学生能够掌握C语言基础语法,包括变量声明、数据类型、运算符等。

2. 学生能够理解并运用循环结构、条件语句编写简单的打字游戏程序。

3. 学生了解基本的计算机编码知识,如ASCII码。

技能目标:1. 学生能够运用C语言编写简单的打字游戏程序,提高编程实践能力。

2. 学生能够通过编写代码解决问题,培养逻辑思维和问题解决能力。

3. 学生能够熟练使用计算机键盘,提高打字速度和准确性。

情感态度价值观目标:1. 学生培养对编程的兴趣,激发学习C语言的热情。

2. 学生在团队协作中,培养沟通、协作能力,增强团队意识。

3. 学生通过编程实践,体会计算机科学的魅力,树立正确的科技观。

课程性质:本课程为实践性较强的编程课程,结合打字游戏的形式,让学生在轻松愉快的氛围中学习C语言编程。

学生特点:五年级学生,具备一定的计算机操作能力,对游戏有浓厚兴趣,具备初步的逻辑思维能力。

教学要求:教师应注重引导学生主动探究、实践,关注学生的个体差异,鼓励学生发挥创意,提高编程能力和团队协作能力。

通过本课程的学习,使学生达到上述具体的学习成果。

二、教学内容1. C语言基础语法:- 变量声明、数据类型(整型、字符型)- 常量和变量- 运算符(算术、关系、逻辑)- 语法结构(顺序、选择、循环)2. 编程实践:- 打字游戏程序设计思路- 设计简单循环结构,实现打字游戏基本框架- 引入随机函数,生成随机字母或单词- 使用条件语句,判断用户输入与随机字母的匹配3. 计算机编码知识:- ASCII码介绍- 键盘布局与打字技巧4. 教学内容的安排和进度:- 第一课时:C语言基础语法回顾,介绍打字游戏目标- 第二课时:设计打字游戏基本框架,学习循环结构- 第三课时:引入随机函数,学习条件语句- 第四课时:完善打字游戏功能,进行编程实践- 第五课时:总结与展示,讨论编程过程中的问题及解决方法教材关联:- 《C语言趣味编程》第三章:循环结构- 《C语言趣味编程》第四章:分支结构- 《计算机科学》第二单元:计算机编码知识教学内容注重科学性和系统性,结合教材相关章节,引导学生通过实践掌握C 语言编程知识,提高编程技能。

课程设计MFC打字游戏

课程设计MFC打字游戏

集中上机实习报告一、需求分析1.选题接到课程设计任务后,我们对曾经非常感兴趣的几款经典小游戏作了分析并筛选,然后根据老是给的推荐题目以及自己的编程能力做了选择,决定了编写在dos化境下的打字游戏,锻炼在自己对函数,指针,类的综合运用,以及对颜色控制函数的使用。

2.功能在windows窗口环境下实现打字游戏的运行,正确与错误字符的统计,以及时间的统计。

游戏开始后,屏幕上方同时有四个数字分四列下落,每个数字由三位组成(随机生成,但首位不可相同)。

玩家用键盘依次输入数字,如果输入的数字序列与某一列正在下落的数字三位全部相同,则给玩家加10分,该列数字消失,该列新产生数字并下落;如果输入的数字某一位不相同,则输入的数字序列全部作废,重新接收输入。

某一列数字到达屏幕底部则游戏结束二、总体设计说明1.设计思路用结构体存储每组数字,然后利用MFC里面的Timer作为时间流程,并重写对话框类里面的OnPaint()函数实现图形的绘制2.程序框图操作控制:如图1所示三、代码实现本程序MFC主要代码// 打字游戏Dlg.cpp : implementation file//// 打字游戏Dlg.h : header file//#if !defined(AFX_DLG_H__C9D22D72_CFA5_4621_8784_36A4BE47F2E5__INCLUDED_) #define AFX_DLG_H__C9D22D72_CFA5_4621_8784_36A4BE47F2E5__INCLUDED_#if _MSC_VER > 1000#pragma once#endif // _MSC_VER > 1000/////////////////////////////////////////////////////////////////////////////// CMyDlg dialogstruct Number{int n[3];int x;int y;int color[3];//判断是否被键入};class CMyDlg : public CDialog{// Constructionpublic:CMyDlg(CWnd* pParent = NULL); // standard constructor// Dialog Data//{{AFX_DATA(CMyDlg)enum { IDD = IDD_MY_DIALOG };// NOTE: the ClassWizard will add data members here//}}AFX_DATA// ClassWizard generated virtual function overrides//{{AFX_VIRTUAL(CMyDlg)public:virtual BOOL PreTranslateMessage(MSG* pMsg);protected:virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support//}}AFX_VIRTUAL// Implementationprotected:HICON m_hIcon;struct Number number[4];//数字int flag,now;//flag为选中列,now为位数// Generated message map functionsvoid SetInit();//初始化随机数int isSame();//判断是否相同int isWin(int flag);//判断成功void setNew(int flag);//新增随机数int isLost();//判断是否失败int count;//记分器//{{AFX_MSG(CMyDlg)virtual BOOL OnInitDialog();afx_msg void OnSysCommand(UINT nID, LPARAM lParam);afx_msg void OnPaint();afx_msg HCURSOR OnQueryDragIcon();afx_msg void OnTimer(UINT nIDEvent);afx_msg void Onstart();afx_msg void Onabout();//}}AFX_MSGDECLARE_MESSAGE_MAP()};//{{AFX_INSERT_LOCA TION}}// Microsoft Visual C++ will insert additional declarations immediately before the previous line.#endif// !defined(AFX_DLG_H__C9D22D72_CFA5_4621_8784_36A4BE47F2E5__INCLUDED_)#include "stdafx.h"#include "打字游戏.h"#include "打字游戏Dlg.h"#include "time.h"#include "string.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif/////////////////////////////////////////////////////////////////////////////// CAboutDlg dialog used for App Aboutclass CAboutDlg : public CDialog{public:CAboutDlg();// Dialog Data//{{AFX_DATA(CAboutDlg)enum { IDD = IDD_ABOUTBOX };//}}AFX_DATA// ClassWizard generated virtual function overrides//{{AFX_VIRTUAL(CAboutDlg)protected:virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //}}AFX_VIRTUAL// Implementationprotected://{{AFX_MSG(CAboutDlg)//}}AFX_MSGDECLARE_MESSAGE_MAP()};CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD){//{{AFX_DATA_INIT(CAboutDlg)//}}AFX_DATA_INIT}void CAboutDlg::DoDataExchange(CDataExchange* pDX){CDialog::DoDataExchange(pDX);//{{AFX_DATA_MAP(CAboutDlg)//}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)//{{AFX_MSG_MAP(CAboutDlg)// No message handlers//}}AFX_MSG_MAPEND_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////// CMyDlg dialogCMyDlg::CMyDlg(CWnd* pParent /*=NULL*/): CDialog(CMyDlg::IDD, pParent){//{{AFX_DATA_INIT(CMyDlg)// NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT// Note that LoadIcon does not require a subsequent DestroyIcon in Win32 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);}void CMyDlg::DoDataExchange(CDataExchange* pDX){CDialog::DoDataExchange(pDX);//{{AFX_DATA_MAP(CMyDlg)// NOTE: the ClassWizard will add DDX and DDV calls here //}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(CMyDlg, CDialog)//{{AFX_MSG_MAP(CMyDlg)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_WM_TIMER()ON_COMMAND(ID_start, Onstart)ON_COMMAND(ID_about, Onabout)//}}AFX_MSG_MAPEND_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////// CMyDlg message handlersBOOL CMyDlg::OnInitDialog(){CDialog::OnInitDialog();// Add "About..." menu item to system menu.// IDM_ABOUTBOX must be in the system command range.ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX < 0xF000);CMenu* pSysMenu = GetSystemMenu(FALSE);if (pSysMenu != NULL){CString strAboutMenu;strAboutMenu.LoadString(IDS_ABOUTBOX);if (!strAboutMenu.IsEmpty()){pSysMenu->AppendMenu(MF_SEPARATOR);pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);}}// Set the icon for this dialog. The framework does this automatically// when the application's main window is not a dialogSetIcon(m_hIcon, TRUE); // Set big iconSetIcon(m_hIcon, FALSE); // Set small icon// TODO: Add extra initialization hereSetInit();//初始化随机数SetTimer(1,500,NULL);//初始化时间return TRUE; // return TRUE unless you set the focus to a control}void CMyDlg::OnSysCommand(UINT nID, LPARAM lParam){if ((nID & 0xFFF0) == IDM_ABOUTBOX){CAboutDlg dlgAbout;dlgAbout.DoModal();}else{CDialog::OnSysCommand(nID, lParam);}}// If you add a minimize button to your dialog, you will need the code below// to draw the icon. For MFC applications using the document/view model,// this is automatically done for you by the framework.void CMyDlg::OnPaint(){if (IsIconic()){CPaintDC dc(this); // device context for paintingSendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);// Center icon in client rectangleint cxIcon = GetSystemMetrics(SM_CXICON);int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect(&rect);int x = (rect.Width() - cxIcon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;// Draw the icondc.DrawIcon(x, y, m_hIcon);}else{CPaintDC dc(this);dc.SetBkMode(TRANSPARENT);dc.TextOut(360,320,"你的分数:");dc.TextOut(440,320,itoa(count,new char,10));for(int i=0;i<4;i++){for(int j=0;j<3;j++){if(number[i].color[j]==1)dc.SetTextColor(RGB(255,0,0));if(number[i].color[j]==0)dc.SetTextColor(RGB(0,0,0));if(number[i].color[j]==-1)continue;dc.TextOut(number[i].x+j*7,number[i].y,itoa(number[i].n[j],new CHAR,10),1);}}CDialog::OnPaint();}}// The system calls this to obtain the cursor to display while the user drags// the minimized window.HCURSOR CMyDlg::OnQueryDragIcon(){return (HCURSOR) m_hIcon;}//初始化随机四列数字void CMyDlg::SetInit(){int i,j,r;int num[10]={0,1,2,3,4,5,6,7,8,9};count=0;//初始化分数flag=-1,now=0;//flag为选中列,now为位数srand(time(NULL));for(i=0;i<3;i++)//每组的第i个{do{for(j=0;j<4;j++){r=rand()%9;this->number[j].n[i]=num[r];}}while(i==0&&isSame()==1);}for(i=0;i<4;i++){number[i].y=0;number[i].x=50+100*i;for(j=0;j<3;j++)number[i].color[j]=0;}}//判断首位是否相同int CMyDlg::isSame(){int flag=0;for(int i=0;i<3;i++)for(int j=i+1;j<4;j++){if(number[i].n[0]==number[j].n[0]){return 1;}}return flag;}//获取消息,键盘按键事件BOOL CMyDlg::PreTranslateMessage(MSG* pMsg){// TODO: Add your specialized code here and/or call the base classint i,j;if(pMsg->message== WM_KEYDOWN){//当初始为第一个数字的时候if(flag==-1){for(i=0;i<4;i++){if(number[i].n[0]==pMsg->wParam-48){//击中第一个数字number[i].color[0]=1;now++;//now记录当前位数flag=i;//记录当前列}}}else{if(number[flag].n[now]==pMsg->wParam-48)//连续击中数字{number[flag].color[now]=1;now++;if(isWin(flag)==1){//如果赢了count+=10;for(i=0;i<3;i++)number[flag].color[i]=0;setNew(flag);//重新创建number[flag].y=0;Invalidate(true);flag=-1;now=0;}}else//输错了就重新开始{//重新清0for(i=0;i<3;i++)number[flag].color[i]=0;flag=-1;now=0;}}Invalidate(true);}return CDialog::PreTranslateMessage(pMsg);}//判断某个数字是否可以消掉int CMyDlg::isWin(int flag){for(int i=0;i<3;i++){if(number[flag].color[i]==0)return 0;}return 1;}void CMyDlg::OnTimer(UINT nIDEvent){// TODO: Add your message handler code here and/or call default CString cs="失败了,你的得分是:";cs+=itoa(count,new char,10);if(nIDEvent==1){for(int i=0;i<4;i++)number[i].y+=10;if(isLost()==1){KillTimer(1);MessageBox(cs);}Invalidate(true);}CDialog::OnTimer(nIDEvent);}//新增随机数void CMyDlg::setNew(int flag){int r,i;int num[10]={0,1,2,3,4,5,6,7,8,9};srand(time(NULL));do{for(i=0;i<3;i++){r=rand()%9;this->number[flag].n[i]=num[r];}}while(isSame()==1);}int CMyDlg::isLost(){//判断是否失败for(int i=0;i<4;i++){if(number[i].y>280)return 1;}return 0;}void CMyDlg::Onstart(){// TODO: Add your command handler code here SetInit();//开始游戏SetTimer(1,500,NULL);Invalidate(true);}void CMyDlg::Onabout(){// TODO: Add your command handler code hereMessageBox("作者:计算机,陈琪");}四、问题解决本次遇到了主要两个问题;1.就是设计存储结构的时候,最开始用的数组,但是后来经过测试的时候发现不容易控制,然后经过仔细思考决定用结构体数组,这样简便,使得存储更加方便2.第二个就是掉下来的数字可能有相同的,就会出现打字错误,仔细检查后终于发现了这个问题,采用在之前先检查随机数是否重复五、总结展望参考资料和程序成品,我了解了游戏的最基本形式。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《C++课程设计实验报告》
姓名: XXX
学号: XXXXXXX
班级: XXXXXX
指导教师: XX
完成日期: XXXX年X月X日
目录
一、问题简述 (2)
二、需求分析及系统设计 (2)
(一)需求分析 (2)
(二)系统设计 (2)
三、程序测试结果 (4)
四、问题及解决方案和收获与心得 (7)
(一)问题及解决方案 (7)
(二)收获与心得 (7)
五、程序源代码 (8)
一、问题简述
本题目(参考题五)要求设计并实现一个打字游戏,游戏要求如下:
游戏开始后,屏幕上方同时有四个数字分四列下落,每个数字由三位组成(随机生成,但首位不可相同)。

玩家用键盘依次输入数字,如果输入的数字序列与某一列正在下落的数字三位全部相同,则给玩家加10分,该列数字消失,该列新产生数字并下落;如果输入的数字某一位不相同,则输入的数字序列全部作废,重新接收输入。

某一列数字到达屏幕底部则游戏结束。

对于本题目我采用C++进行设计并实现。

二、需求分析及系统设计
(一)需求分析
需要设计的这个游戏程序,其规则在上述问题简述中已经进行了详细描述。

其中有几个方面是这个程序所需要的主要模块:
(1)生成四组随机的三位数,并且所生成的四组随机数要求首位不相同;
(2)分析并选取合适的方式来存储这些随机数;
(3)所有显示出的数能够按照一定频率向下进行滚动;
(4)键盘输入一组数字,并在输入匹配的情况下消除与之匹配的数,然后产生一个不同于其他三组的新随机数;
(5)判断游戏结束的标准并输出分数。

(二)系统设计
通过分析,选择二维数组作为存储并处理这些随机数的容器,所有主要步骤都在这个二维数组中设计并实现;在随机数的生成上选择以当前系统时间为随机
种子来生成所需要的四组随机数;
该程序包含的模块:
class GRN -(该类负责生成随机数 Generate Random Number)
void generate()-(生成随机数)
int RN()-(将生成的随机数返回n)
class Run -(该类负责实现程序的其他主要功能)
void initialize()-(对数组以及各类参数进行初始化)
void importing()-(将生成的符合要求的随机数导入到数组中)
void show()-(显示游戏运行过程)
void judge()-(判断所输入的数是否满足消去条件并进行记分)
void act(int t)-(执行,消去满足条件的数并在该列顶端生成新随机数)
系统流程图:
三、程序测试结果(OS:Windows 8 编译:VS2012)
1.游戏程序开始执行界面
2.输入数字每次移动的时间间隔(单位ms)
3.游戏开始运行
4.游戏进行中
5.游戏结束
6.经过测试,游戏能够正常运行并且所得分数正确。

四、问题及解决方案和收获与心得
(一)问题及解决方案
在设计开始时,希望能把这个游戏程序做成windows图形界面来显示,但是由于时间和能力不足,最终选择将程序实现在DOS窗口界面下。

在设计过程中,对游戏进行时的滚动速度想实现成逐渐加快的模式,但是实现过程发现有一些缺陷,于是改善成由用户自己手动输入Sleep(t)中t的数值来设置游戏中数字的滚动速度,这样用户可以有不同的体验。

(二)收获与心得
通过完成本次C++游戏程序的设计与实现,我对C++程序的设计有了更深一层的了解,锻炼了使用C+编程的熟练程度,对程序的设计步骤与相关细节的实现有了更好的认识;在完成程序的过程中,会出现一些错误,但是有些错误只要细心一点就可以避免,这样写程序的效率就会提高,另外,整洁的代码对于所写程序的质量也有很好的帮助与提升。

五、程序源代码
#include<iostream>
#include<>
#include<>
#include<>
#include<>
using namespace std;
class GRN enerate();
a[1].generate();
a[2].generate();
a[3].generate();
if(a[0].RN()/100!=a[1].RN()/100 && a[1].RN()/100!=a[2].RN()/100 &&
a[2].RN()/100!=a[3].RN()/100
&& a[0].RN()/100!=a[2].RN()/100 && a[0].RN()/100!=a[3].RN()/100 &&
a[1].RN()/100!=a[3].RN()/100) N();
n[0][1]=a[1].RN();
n[0][2]=a[2].RN();
n[0][3]=a[3].RN();
}
void Run::show()
{
for(i=0;i<25;i++)
{
for(j=0;j<4;j++)
{
if(n[i][j]!=0)
{
cout<<n[i][j]<<" ";
}
else
cout<<" ";
if(_kbhit())
{
s[k]=_getch();
k++;
}
}
cout<<endl;
}
}
void Run::judge()
{
if(k==3)
{
s[3]='\0';
num=atoi(s);
if(num==a[0].RN() || num==a[1].RN() || num==a[2].RN() || num==a[3].RN())
N()) enerate();
if(a[0].RN()/100!=a[1].RN()/100 && a[0].RN()/100!=
a[2].RN()/100 && a[0].RN()/100!=a[3].RN()/100)
break;
}
n[l-1-z[0]][0]=0;
z[0]=l-1;
}
if(num==a[1].RN()) enerate();
if(a[0].RN()/100!=a[1].RN()/100 && a[1].RN()/100!=
a[2].RN()/100 && a[1].RN()/100!=a[3].RN()/100)
break;
}
n[l-1-z[1]] [1]=0;
z[1] = l - 1;
}
if(num==a[2].RN()) enerate();
if(a[2].RN()/100!=a[1].RN()/100 && a[0].RN()/100!=
a[2].RN()/100 && a[2].RN()/100!=a[3].RN()/100)
break;
}
n[l-1-z[2]][2]=0;
z[2]=l-1;
}
if(num==a[3].RN()) enerate();
if(a[3].RN()/100!=a[1].RN()/100 && a[3].RN()/100!=
a[2].RN()/100 && a[0].RN()/100!=a[3].RN()/100)
break;
}
n[l-1-z[3]][3]=0;
z[3]=l-1;
}
}
k=0;
s[0]='\0';
}
}
void Run::act(int t)
{
for(l=1; ;l++)
{
show();
judge();
n[l-z[0]-1][0]=0;
n[l-z[1]-1][1]=0;
n[l-z[2]-1][2]=0;
n[l-z[3]-1][3]=0;
n[l-z[0]][0]=a[0].RN();
n[l-z[1]][1]=a[1].RN();
n[l-z[2]][2]=a[2].RN();
n[l-z[3]][3]=a[3].RN();
Sleep(t);
system("cls");
if(l-z[0]==24 || l-z[1]==24 || l-z[2]==24 || l-z[3]==24)
{
cout<<"******GAME OVER******"<<endl
<<"您最后的总得分是:"<<grade<<endl;
exit(0);
}
}
}
#include""
int main()
{
int n,t;
srand(time(NULL)); //以当前时间为随机种子
cout<<"请输入数字每次移动的时间间隔/ms(建议设置500ms上下):";
cin>>n;
t=n;
Sleep(1000);
Run r;
();
();
(t);
return 0;
}。

相关文档
最新文档