打字练习小游戏

发布时间:2020-05-06 21:42:07   来源:文档文库   
字号:

XXXX大学

C#课程设计报告

打字练习小游戏

(系)别

指导教师

二○XXXX



摘 要

随着社会经济的发展,计算机在生活占据着越来越重要的地位,如何高效快速的使用计算机解决问题重要性尤为突出,社会竞争压力越来越大,工作与娱乐相结合更受群众喜爱。基于以上分析,我们开发了一个打字练习的小游戏。游戏应用基于Visual Studio 2008平台的应用程序开发技术,采用C#作为开发编程语言,实现打字游戏的练习计算机键盘按键位置及娱乐功能。该系统具有结构清晰、便于分布、实施简单、易于扩充、维护等特点,其功能主要是:在玩游戏的过程中练习打字,提高打字速度,熟悉键盘。其主要特点是操作简单,娱乐性强,可自由控制难易度。

关键词:打字练习,C#编程





1 概述

1.1 设计的背景和意义

1.1.1 设计的背景

1946年,第一台计算机在美国诞生。之后随着社会经济的发展,计算机的作用与日俱增,计算机的高效运用决定了工作的效率及质量。它被广泛运用于人们生活的各个方面,军事、工业、教育、农业等各个方面,从而更好的推动经济的增长。

同系列的其他打字游戏的功能主要包括熟悉字母,提高辨识、确认字母能力,特殊的还具有计时和惩罚奖励,调节游戏速度功能。我们的打字游戏在实现以上的所有功能外还有所创新,不仅游戏方式新颖,还具有分数换取游戏次数的机制,使得游戏可玩性大大加强。

1.1.2 设计的意义

随着计算机的更进一步普及,人们熟练掌握计算机运用已经成为衡量一个优秀人才的重要指标。打字速度的快慢直接影响工作的质量和效率。打字游戏,主要是培养电脑新手更快的掌握计算机的键盘布局以及特性,为以后更快更便捷的使用键盘做基础。同时,它也是一款休闲益智的小游戏,可供人们在闲暇时刻放松自己。这样既能娱乐又能练习打字速度,不失为一款好游戏。

1.2 设计任务分工说明

本设计的完成者包括:XXXX,其中XX主要负责分析程序,从网上及其图书馆浏览他人程序进行剖析利用,进一步改进游戏程序。XX主要负责系统的总体方向,及其个别控件的利用及其实现,主要是课程设计报告的编写及其排版等。

2 系统分析

2.1 软件功能分析

该游戏的整体功能设计如图2.1所示。

图2.1 游戏整体功能图

各部分的功能说明:

此软件模仿了其他同类游戏的部分功能,简单易用,可以对游戏有直观的行认识,其游戏界面如图2.2

图2.2 登陆界面展示

2.2 程序流程分析

该程序主要实现提高打字速度能力我们进入界面后点击游戏控制中的开始,可以进行游戏,根据用户所完成的情况,适当调节游戏速度,暂停为用户提供了一个遇忙的时间,而积分兑换当用户失误的时候补救的一个措施,游戏中。根据用户所完成的结果会适当的给用户积分,一般需要付出一定的积分,才换回一条生命值,用户也可以不选择积分兑换。系统流程如图2.3。

2.3 系统流程图

2.3 程序性能分析

该软件由于是初级程序编写修改练习,因此处理方便简单易行,不需要很多的电脑专业知识,初学者也可熟练掌握。该程序的运行环境是Windows系统,兼容性好,可以普遍的应用于各个计算机的各个系统,共享性良好。



3 系统设计

3.1 物理配置方案设计

由于是小容量的小游戏,因而可以在任何完整配置的电脑中使用,不存在兼容性以及使用要求问题。游戏编写运用了Microsoft Visual Studio 2008,游戏时只需要普通的自带打开软件即可。

3.2 数据文件设计

本游戏的设计程序主要有两个表构成,它们分别游戏规则表与游戏构造表,如图3.1

3.1.1 数据文件截图

下面是游戏构造文件示例性展示如图3.1.2

3.2 游戏内容

下面是游戏规则文件示例性展示如图3.1.3

3.1.3 游戏规则表

3.3 操作数据文件

启动Microsoft Visual Studio 2008 运行程序,即可开始游戏

3.4 界面设计

本软件主要包括两部分:游戏控制和游戏难度。

游戏控制里又有三个控制按钮,分别为开始,暂停和积分兑换。开始和暂停键分别控制着游戏的进程状态。每成功击打一个飘落字母,便可获得一个积分,积分兑换作用是将玩家游戏过程中成功积攒的积分转换为玩家的生命值,每十个积分可换一次生命值。此设置大大加强游戏的可玩性。

本游戏主要有主界面、开始界面与结束界面构成如图

图3.4.1 主界面

图3.4.2 开始界面

图3.4.3 结束界面

3.1.5 积分换生命界面

3.4 其他说明

由于时间仓促,其中让字母实现交叉飘动没能够完成,在后期我们会进一步设计和完善

4 系统实现

public void flutter(int time, int value)

{

if (_life <= 0)

{

stop();

MessageBox.Show("生命值为0,游戏结束!", "对不起");

return;

}

this.timerrate.Interval = time;

List al = new List(); //存放已经沉淀到最底部的lab在hash中的key

foreach (DictionaryEntry de in _htlab)

{

Label lab = (Label)de.Value;

if (lab.Location.Y >= this.Size.Height - 80)

{ //如果lab坐标大于本程序最底部-80执行

lab.Dispose(); //销毁lab

al.Add(de.Key); //把当前hash的key存入arraylist

_life--; //落地减生命

this.Text = "第" + ((_count / 50) + 1) + "关 您的生命值:"

+ _life + " 分数:" + _count;

}

else

if (lab.Location.X <350 && lab.Location.X >250)

{

lab.Location = new Point(lab.Location.X ,

lab.Location.Y + value);

}

else

if (lab.Location.X >350)

{

lab.Location = new Point(lab.Location.X -value,

lab.Location.Y + value);

}

else

{

lab.Location = new Point(lab.Location.X +value,

lab.Location.Y + value);

}

//让lab像屏幕下方移动

}

for (int i = 0; i < al.Count; i++) //循环从hash移除已经不显示的lab

{

_htlab.Remove(al[i]);

}

}

这里重点修改了字符飘动的轨迹

5 总结

经过这次课程设计,我们完成了自己选择的打字母小游戏课题,有挺多的收获。虽然程序最后是完成了,但是实现的过程中却遇到了很多问题。平时感觉挺简单的那些枯燥单调的代码,真正到了自己运用的时候却无从下手;好不容易写出来的一大段代码,一经调试却跳出来一大堆的错误;还有就是这最后的课程设计报告书,平时都不怎么碰的word文档,文档处理、排版又成了令人头疼的一大问题。但是,解决问题的过程恰是不断学习的过程:平时所学的一小段一小段的代码到现在必须把它们联系起来使用,把平时学的知识运用到实际,增强了我的实践动手能力;面对一大堆的错误,只得一个个找出来,一个个改掉,一遍遍的调试,一行行代码的运行,不断地重复,最终将错误改正,这番痛苦的过程让我学们会了如何调试运行,如何逐行逐语句运行,锻炼了我调试、测试程序的能力;同时,报告书的书写,让我们学会了word文档的排版以及文档处理,学会如何做出美观整齐的课程设计报告书。

课程设计中遇到的问题只凭自己苦思冥想是不能全部解决的,这是同学老师的建议和网络给了我很大的帮助。遇到自己解决不了的问题时,多多向老师同学请教,或许问题就能迎刃而解。另外,生在这个信息化社会,互联网的作用不言而喻,许多问题只要在网上搜索一下就能得到非常令人满意的解答。此次课程设计锻炼了我和老师同学交流的能力,以及网上搜索资源,筛选信息的能力

参考文献

1 明日科技,C#从入门到精通,北京.清华大学出版社,2008

2付强 丁宁,C#编程实战宝典,北京清华大学出版社,2014

3 毕文斌 孙明亮,C#Windows游戏设计,北京.清华大学出版社,2014

4 齐立波,C#入门经典,北京,清华大学出版社,第五版

5王小科王军,C#开发实战1200例,北京,清华大学出版社,2011

附录1项目源码

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

using System.Collections; //Hashtable add

namespace 打字游戏

{

public partial class Form1 : Form

{

//私有字段

Hashtable _htlab = new Hashtable(); //存放lab控件

int _count = 0; //游戏分数

int _life = 10; //生命值,小于0死亡,过关生命10

public Form1()

{

InitializeComponent();

}

///

/// 开始游戏

///

///

///

private void TSMenuItemStart_Click(object sender, EventArgs e)

{

this.timerlab.Enabled = true;

this.timerrate.Enabled = true;

this.timerrate.Interval = 1;

this.timerlab.Interval = 1;

_count = 0;

_life = 10;

if (_htlab == null)

_htlab = new Hashtable();

}

///

/// 暂停游戏

///

///

///

private void TSMenuItemPause_Click(object sender, EventArgs e)

{

this.timerlab.Enabled = false;

this.timerrate.Enabled = false;

}

///

/// 让字符飘动的定时器Tick事件

///

///

///

private void timerrate_Tick(object sender, EventArgs e)

{

//调用飘动方法,设置飘动速度为10毫秒移动(_count / 50) + 1个大小的位置

flutter(10, (_count / 50) + 6);

}

//产生字符的定时事件

private void timerlab_Tick(object sender, EventArgs e)

{

//调用产生字符方法,每888-(_count / 50) * 200毫秒产生一个字号20的字符

create(888 - (_count / 50) * 200, 20);

}

///

/// 游戏结束时状态

///

public void stop()

{

this.timerlab.Enabled = false;

this.timerrate.Enabled = false;

foreach (DictionaryEntry de in _htlab)

{

Label l = (Label)de.Value;

l.Dispose();

}

this.Text = "游戏结束,请从新开始!";

}

///

/// 让屏幕控件飘动方法

///

/// 飘动速度

/// 飘动范围-在软件上移动的范围

public void flutter(int time, int value)

{

if (_life <= 0)

{

stop();

MessageBox.Show("生命值为0,游戏结束!", "对不起");

return;

}

this.timerrate.Interval = time;

List al = new List(); //存放已经沉淀到最底部的lab在hash中的key

foreach (DictionaryEntry de in _htlab)

{

Label lab = (Label)de.Value;

if (lab.Location.Y >= this.Size.Height - 80)

{ //如果lab坐标大于本程序最底部-80执行

lab.Dispose(); //销毁lab

al.Add(de.Key); //把当前hash的key存入arraylist

_life--; //落地减生命

this.Text = "第" + ((_count / 50) + 1) + "关 您的生命值:"

+ _life + " 分数:" + _count;

}

else

if (lab.Location.X <350 && lab.Location.X >250)

{

lab.Location = new Point(lab.Location.X ,

lab.Location.Y + value);

}

else

if (lab.Location.X >350)

{

lab.Location = new Point(lab.Location.X -value,

lab.Location.Y + value);

}

else

{

lab.Location = new Point(lab.Location.X +value,

lab.Location.Y + value);

}

//让lab像屏幕下方移动

}

for (int i = 0; i < al.Count; i++) //循环从hash移除已经不显示的lab

{

_htlab.Remove(al[i]);

}

}

///

/// 从屏幕产生字符

///

/// 产生速度-毫秒

/// 字体大小

public void create(int value, int font)

{

this.Text = "第" + ((_count / 50) + 1) + "关 您的生命值:"

+ _life + " 分数:" + _count;

this.timerlab.Interval = value; //设置产生速度毫秒

Label lab = new Label();

lab.AutoSize = true;

lab.Font = new Font("Microsoft Sans Serif", font,

FontStyle.Regular, GraphicsUnit.Point, 0); //设置字体

Random r = new Random();

lab.ForeColor = Color.FromArgb(r.Next(100, 255),

r.Next(100, 255),r.Next(100, 255)); //随机生成颜色

//屏幕随机出现位置

lab.Location = new Point((this.Size.Width - 50) -

r.Next(0, (this.Size.Width - 50)), 28);

string _char = new myRandom().getChar(1); //获取随机出来的字符

string labname = ""; //lab名字

int i = 0; //临时计数器存储当前界面上的lab是否存在本次生成的字母个数

foreach (DictionaryEntry de in _htlab)

{

if (de.Key.ToString().IndexOf(_char) != -1)

{

i++;

}

}

labname = _char + (i * DateTime.Now.Millisecond);

lab.Name = labname; //设置lab名字,防止打乱顺序

lab.Text = _char; //让此lab显示生成的字符

this.Controls.Add(lab);

//把本次随机出的lab放入Hashtable集合,方便验证

_htlab.Add(labname, lab);

}

private void TSMenuItemLife_Click(object sender, EventArgs e)

{

if (_count >= 10)

{

_life++;

_count -= 10;

this.Text = "您的生命值:" + _life + " 分数:" + _count;

}

else

MessageBox.Show("您的游戏积分不足10!", "对不起");

}

// 判断用户输入字符的事件

private void mainFrm_KeyUp(object sender, KeyEventArgs e)

{

foreach (DictionaryEntry de in _htlab)

{

if (de.Key.ToString().IndexOf(Convert.ToChar(e.KeyCode)) != -1)

{

Label lab = (Label)_htlab[de.Key];

lab.BackColor = Color.White;

lab.Dispose(); //销毁lab

_htlab.Remove(de.Key);//从hash移除已经不显示的lab

_count++;

this.Text = "第" + ((_count / 50) + 1) + "关 您的生命值:"

+ _life + " 分数:" + _count;

break;

}

}

}

private void Form1_Load(object sender, EventArgs e)

{

}

private void TSMenuItemMain_Click(object sender, EventArgs e)

{

}

}

}

using System;

using System.Collections.Generic;

using System.Text;

namespace 打字游戏

{

class myRandom

{

static int _i = 1;

public string getChar(int len)

{

string[] _char = new string[] {"A","B","C","D","E","F","G","H","I","J",

"K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"};

Random rand;

string str = "";

while (true)

{

if (str.Length == len)

break;

rand = new Random(DateTime.Now.Millisecond * _i);

_i++;

int r = rand.Next(0, 25);

if (str.IndexOf(_char[r]) != -1)

{

str = "";

}

else

str += _char[r];

}

return str;

}

}

}

本文来源:https://www.2haoxitong.net/k/doc/b7bed35e094e767f5acfa1c7aa00b52acec79c6d.html

《打字练习小游戏.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式