C#纯代码实现打字游戏

本文实例为大家分享了C#实现打字游戏的具体代码,供大家参考,具体内容如下

一、需求分析

1、界面设计 布局

  • 需要哪些内容控件
  • 容器的概念
  • 集合的概念

2、开始游戏

  • 字母的生成 26个字母 ASCII码值
  • 字母的载体 控件
  • 字母、位置、大小、颜色
  • 要求随机的
  • 计时器

3、字母从上往下运动

  • TOP变化
  • 注意:垃圾回收问题,未消除的字母进行销毁,释放资源
  • 计时器

4、需要产生对应的从下往上生成字母子弹,打掉字母

  • 处理与键盘之间的交互,键盘相关事件
  • 字母需要转换,ASCII码值
  • 知识点:事件参数:EventArgs e
  • 子弹从下往上运动
  • 子弹与字母相遇,两者消失

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;
   }
   }
  }
  }
 }
 }
}

三、运行结果

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • C#实现简单打字小游戏

    本文实例为大家分享了C#实现简单打字小游戏的具体代码,供大家参考,具体内容如下 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.For

  • 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 kai

  • C#实现打字游戏

    本文实例为大家分享了C#实现打字游戏的具体代码,供大家参考,具体内容如下 思路: 1.有一个游戏界面,我用panel作为游戏界面 2.开始生成字母 打字游戏的字母是不断生成的,所以用计时器timer来生成字母 所有生成的字母设置tag方便寻找 3.字母下落 字母下落是一个持续的动作,所以也在计时器里做 在计时器里通过foreach遍历panel中的所有控件,同时通过tag找到字母,让字母下降 4.生成子弹 通过获取键盘事件生成子弹 5.子弹与字母相碰 代码: private void Form1

  • C#实现简单打字游戏

    本文实例为大家分享了C#实现简单打字游戏的具体代码,供大家参考,具体内容如下 运行效果图如下: 功能:程序运行后,点击开始按钮,窗体中的文本框中出现字母,用户通过键盘输入文本框中字母,窗体显示用时.正确数.错误数和正确率. 按钮:开始.结束.退出. 菜单:设置(开始游戏.结束游戏.退出游戏),查看(正确率.所用时间). 页面: 控件属性: timer1: enabled选择false,Interval设置为5. timer2: enabled选择false,Interval设置为1000. 代码

  • C#纯代码实现打字游戏

    本文实例为大家分享了C#实现打字游戏的具体代码,供大家参考,具体内容如下 一.需求分析 1.界面设计 布局 需要哪些内容控件 容器的概念 集合的概念 2.开始游戏 字母的生成 26个字母 ASCII码值 字母的载体 控件 字母.位置.大小.颜色 要求随机的 计时器 3.字母从上往下运动 TOP变化 注意:垃圾回收问题,未消除的字母进行销毁,释放资源 计时器 4.需要产生对应的从下往上生成字母子弹,打掉字母 处理与键盘之间的交互,键盘相关事件 字母需要转换,ASCII码值 知识点:事件参数:Eve

  • javascript 打字游戏实现代码

    效果如图所示:下面是核心代码 复制代码 代码如下: GAME = { //随机产生字母 randLetter: function() { var arrLetter = new Array("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K&qu

  • C#飞机打字游戏的代码示例(winform版)

    游戏界面 程序代码 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; namesp

  • javascript实现简单打字游戏

    本文实例为大家分享了javascript打字游戏的具体代码,供大家参考,具体内容如下 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>传智打字游戏</title> <style type="text/css"> .label{ position:a

  • pygame实现打字游戏

    本文实例为大家分享了pygame实现打字游戏的具体代码,供大家参考,具体内容如下 1.基本代码 下面的代码完成了每一秒在界面的顶部随机生成一个新的字母 # -*- coding=utf-8 -*- import pygame from pygame.locals import KEYDOWN import random w,h = 800,600 pygame.init() screen = pygame.display.set_mode((w, h)) white=255,255,255 bl

  • JS实现打字游戏

    本文实例为大家分享了JS实现打字游戏的具体代码,供大家参考,具体内容如下 第一步:页面的排版和布局 1.1实现开始游戏的界面 1.1.1开始游戏 1.1.2游戏说明 <!--游戏开始的界面--> <div id="gameStart"> <div id="start">开始</div> <div id="describe">说明</div> <div id="

  • java实现快速打字游戏

    本文实例为大家分享了java实现打字游戏的具体代码,供大家参考,具体内容如下 import java.util.Random; import java.util.Scanner; public class Game { public Game(Player player) { } public Game() { } public String printStr(Player player) { StringBuffer a=new StringBuffer(); for(int i=0;i<Le

  • java类与对象案例之打字游戏

    类与对象案例-童年回忆之打字游戏 一.玩家类 二.等级类 三.游戏类 四.等级地图 五.测试类 这次要做的案例是一个打字游戏的案例,相信大家小时候都玩过金山打字通的警察抓小偷和飞机大战,这次的案例是类似的简易版. 首先对于这个案例,我们要解决的是如何生成随机的字符串,如何判断生成的字符串和输入的字符串是否相等. 一.玩家类 package com.yc.oop6.hc0705; public class Player { private int score; //积分 private long

随机推荐