本文实例为大家分享了C#实现打字游戏的具体代码,供大家参考,具体内容如下
一、需求分析
1、界面设计 布局
2、开始游戏
3、字母从上往下运动
4、需要产生对应的从下往上生成字母子弹,打掉字母
5、添加动画效果、音效等
二、代码实现
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; //导入媒体命名空间 using System.Media; namespace PlaneTest_02 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } //初始化panel Panel game = new Panel(); //初始化pictureBox PictureBox plane = new PictureBox(); //初始化一个播放器 SoundPlayer sound = new SoundPlayer(); //创建爆炸效果图 ImageList imageList = new ImageList(); //初始化随机数对象 Random ra = new Random(); //添加timer1,控制字母生成 Timer timer1 = new Timer(); //添加timer2,控制字母、子弹运动 Timer timer2 = new Timer(); //添加timer3,控制爆炸效果图的播放 Timer timer3 = new Timer(); //设置游戏开始按钮 Button beginBtn = new Button(); //实现记录分数 Label result = new Label(); //记录分数 int count = 0; //实现记录失误 Label list = new Label(); //记录失误 int rex = 0; private void Form1_Load(object sender, EventArgs e) { //设置窗体属性 this.Text = "天天打字母"; this.Size = new Size(1000,700); this.CenterToScreen(); //设置game属性 game.Size = new Size(800,650); game.BackColor = Color.SkyBlue; game.BorderStyle = BorderStyle.Fixed3D; game.Location = new Point(5,5); this.Controls.Add(game); //设置plane属性 plane.Image = Image.FromFile("../../images/plane/plane4.png"); plane.SizeMode = PictureBoxSizeMode.AutoSize; plane.Location = new Point(game.Width/2-plane.Width/2,game.Height-plane.Height); plane.Tag = "plane"; game.Controls.Add(plane); //设置timer1属性,此计时器控制字母生成 timer1.Tick += Timer1_Tick; timer1.Interval = 1000; //设置timer2属性,此计时器控制字母运动 timer2.Tick += Timer2_Tick; timer2.Interval = 200; //添加键盘按下事件 this.KeyPress += Form1_KeyPress; //设置按钮属性 beginBtn.Text = "开始游戏"; beginBtn.Size = new Size(100,30); beginBtn.Location = new Point(game.Width+50, 20); this.Controls.Add(beginBtn); //生成按钮点击事件 beginBtn.Click += BeginBtn_Click; //设置记录分数label的属性 result.Size = new Size(50,50); result.BackColor = Color.White; result.Location = new Point(beginBtn.Left+ beginBtn.Width/2-result.Width/2, beginBtn.Top+ beginBtn.Height+10); result.TextAlign = ContentAlignment.MiddleCenter; result.Font = new Font("楷体", 22); result.ForeColor = Color.Green; this.Controls.Add(result); //设置记录失误label的属性 list.Size = new Size(50, 50); list.BackColor = Color.White; list.Location = new Point(beginBtn.Left + beginBtn.Width / 2 - list.Width / 2, result.Top + result.Height + 10); list.TextAlign = ContentAlignment.MiddleCenter; list.Font = new Font("楷体", 22); list.ForeColor = Color.Red; this.Controls.Add(list); } /// <summary> /// 按钮点击事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void BeginBtn_Click(object sender, EventArgs e) { if (beginBtn.Text == "开始游戏") { //开启计时器 timer1.Start(); timer2.Start(); timer3.Start(); beginBtn.Text = "暂停游戏"; //开启窗体获取键盘事件的焦点 this.KeyPreview = true; } else { //关闭计时器 timer1.Stop(); timer2.Stop(); timer3.Stop(); beginBtn.Text = "开始游戏"; //关闭窗体获取键盘事件的焦点 this.KeyPreview = false; } } /// <summary> /// 字母生成 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Timer1_Tick(object sender, EventArgs e) { //初始化label Label zimu = new Label(); zimu.Text = ((char)ra.Next(97, 123)).ToString(); zimu.ForeColor = Color.FromArgb(ra.Next(255), ra.Next(255), ra.Next(255)); zimu.Font = new Font("楷体",ra.Next(30, 41)); zimu.Location = new Point(ra.Next(game.Width - zimu.Width),0); zimu.AutoSize = true; zimu.TextAlign = ContentAlignment.MiddleCenter; zimu.Tag = "zimu"; game.Controls.Add(zimu); } /// <summary> /// 字母运动 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Timer2_Tick(object sender, EventArgs e) { result.Text = count.ToString(); list.Text = rex.ToString(); //遍历panel中的控件 foreach (Control item in game.Controls) { //判断控制为label if (item.GetType().Name == "Label") { //判断其tag为字母的tag if (item.Tag.ToString() == "zimu" || item.Tag.ToString() == "change") { item.Top += 10; //释放资源 if (item.Top > plane.Top - 40) { rex++; item.Dispose(); } } } //判断为PictureBox if (item.GetType().Name == "PictureBox") { //判断其tag为子弹的tag if (item.Tag.ToString() == "zidan") { item.Top -= 40; //判断字母与子弹相遇 //遍历panel中的所有控件 foreach (Control it in game.Controls) { //判断控件类型 if (it.GetType().Name == "Label") { //判断tag if (it.Tag.ToString() == "change") { //判断相遇 if (it.Top + it.Height >= item.Top) { count++; //销毁 item.Dispose(); it.Dispose(); //添加爆炸音效 //设置路径 sound.SoundLocation = "../../sound/Bomb.wav"; //播放 sound.Play(); //设置爆炸效果图大小 imageList.ImageSize = new Size(50, 50); //创建爆炸图片 PictureBox Bomb = new PictureBox(); Bomb.Size = new Size(50, 50); Bomb.Tag = 0; Bomb.Location = new Point(it.Left+it.Width/2-Bomb.Width/2,it.Top+it.Height/2-Bomb.Height/2); game.Controls.Add(Bomb); //创建字符串表示路径 string path; for (int i = 0; i < 32; i++) { if (i<10) { path = String.Concat("../../images/Bomb/1000", i.ToString(), ".png"); } else { path = String.Concat("../../images/Bomb/100", i.ToString(), ".png"); } imageList.Images.Add(Image.FromFile(path)); Bomb.Image = imageList.Images[Convert.ToInt32(Bomb.Tag)]; } //设置控制爆炸图播放效果计时器(timer3)的属性 timer3.Tick += Timer3_Tick; timer3.Tag = Bomb; timer3.Interval = 30; timer3.Start(); } } } } } } } } /// <summary> /// 控制爆炸图片 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Timer3_Tick(object sender, EventArgs e) { //通过事件发起者(sender),获取计时器的tag Timer timerBox = sender as Timer; //通过计时器的tag,找到Bomb的tag PictureBox pictureBox = timerBox.Tag as PictureBox; //pictureBox的image与imageList的images相关联 pictureBox.Image = imageList.Images[Convert.ToInt32(pictureBox.Tag)]; //给pictureBox的tag+1 pictureBox.Tag = Convert.ToInt32(pictureBox.Tag) + 1; if (Convert.ToInt32(pictureBox.Tag) >= 31) { timerBox.Dispose(); pictureBox.Dispose(); } } /// <summary> /// 键盘事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Form1_KeyPress(object sender, KeyPressEventArgs e) { //遍历panel中的控件 foreach (Control item in game.Controls) { //判断是控件 if (item.GetType().Name == "Label") { //判断其tag是字母 if (item.Tag.ToString() == "zimu") { if (item.Text == e.KeyChar.ToString()) { //改变字母的tag item.Tag = "change"; //改变plane坐标 plane.Location = new Point(item.Left + item.Width / 2 - plane.Width / 2, game.Height - plane.Height); //生成子弹 PictureBox zidan = new PictureBox(); zidan.Image = Image.FromFile("../../images/Bullet/Ammo_enemy3.png"); zidan.SizeMode = PictureBoxSizeMode.AutoSize; zidan.Tag = "zidan"; zidan.Location = new Point(item.Left + item.Width / 2 - zidan.Width / 2, game.Height - plane.Height); game.Controls.Add(zidan); //字母与子弹对应,则跳出当前循环 return; } } } } } } }
三、运行结果
更多有趣的经典小游戏实现专题,也分享给大家:
C++经典小游戏汇总
python经典小游戏汇总
python俄罗斯方块游戏集合
JavaScript经典游戏 玩不停
java经典小游戏汇总
javascript经典小游戏汇总
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。
本文向大家介绍C#实现打字游戏,包括了C#实现打字游戏的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了C#实现打字游戏的具体代码,供大家参考,具体内容如下 思路: 1、有一个游戏界面,我用panel作为游戏界面 2、开始生成字母 打字游戏的字母是不断生成的,所以用计时器timer来生成字母 所有生成的字母设置tag方便寻找 3、字母下落 字母下落是一个持续的动作,所以也在计时器里做
本文向大家介绍C#实现打字小游戏,包括了C#实现打字小游戏的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了C#实现打字小游戏的具体代码,供大家参考,具体内容如下 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。
本文向大家介绍C#实现简单打字游戏,包括了C#实现简单打字游戏的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了C#实现简单打字游戏的具体代码,供大家参考,具体内容如下 运行效果图如下: 功能:程序运行后,点击开始按钮,窗体中的文本框中出现字母,用户通过键盘输入文本框中字母,窗体显示用时、正确数、错误数和正确率。 按钮:开始、结束、退出。 菜单:设置(开始游戏、结束游戏、退出游戏),查
本文向大家介绍C++代码实现扫雷游戏,包括了C++代码实现扫雷游戏的使用技巧和注意事项,需要的朋友参考一下 前言 提示:本文是基于easyX图形库实现的,还有部分功能可以添加,仅适合新手参考。 提示:以下是本篇文章正文内容,下面案例可供参考 一、扫雷游戏模式 在确定大小的矩形雷区中随机布置一定数量的地雷,玩家需要尽快找出雷区中的所有不是地雷的方块,而不许踩到地雷。 游戏的基本操作包括左键单击和右键
本文向大家介绍C++ 迷宫游戏实现代码,包括了C++ 迷宫游戏实现代码的使用技巧和注意事项,需要的朋友参考一下 C++ 迷宫游戏实现代码 题目 通过让游戏角色自动寻找迷宫出口,走出迷宫,来练习C++面向对象之封装的基础知识。迷宫图如下所示,其中X表示墙。 1、程序分析 走出去的原理:遵循右手规则或左手规则。右手扶墙走,就会走出迷宫,反之,亦然。 step1 创建迷宫类,打印出迷宫地图。
本文向大家介绍C#实现简单打字小游戏,包括了C#实现简单打字小游戏的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了C#实现简单打字小游戏的具体代码,供大家参考,具体内容如下 更多有趣的经典小游戏实现专题,也分享给大家: C++经典小游戏汇总 python经典小游戏汇总 python俄罗斯方块游戏集合 JavaScript经典游戏 玩不停 java经典小游戏汇总 javascript经