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;
namespace 飞机大战
{
  public partial class Form1 : Form
  {
    public Form1()
    {
      InitializeComponent();
    }

    Panel BG = new Panel();// Panel 容器 游戏区对象
    Panel cebainqu = new Panel(); // 按钮区对象
    PictureBox player = new PictureBox(); // 实例化飞机对象
    Random rand = new Random();// 实例化随机对象
    Timer CreateTime = new Timer();// 字母生成定时器
    Timer Flytime = new Timer();// 字母下落定时器
    Label btn = new Label(); // 创建按钮对象
    Label defeng = new Label();// 得分卡对象
    Label xuetiao = new Label();// 血条对象
    int count = 0; // 存储器 记录得分
    SoundPlayer baozhasound = new SoundPlayer(@"../../music/game_over.wav"); // 爆炸音乐对象
    PictureBox feijwei1 = new PictureBox();// 创建飞机尾气对象
    PictureBox feijwei2 = new PictureBox();// 创建飞机尾气对象
    List<Label> labels = new List<Label>(); // 实例化泛型和对象labels用来存储字母
    List<PictureBox> picts = new List<PictureBox>(); // 实例化泛型对象picts用来存储子弹
    private void Form1_Load(object sender, EventArgs e)
    {
      this.Size = new Size(1000, 700);
      //this.FormBorderStyle= FormBorderStyle.FixedToolWindow; // 去掉窗体图标
      this.Text = "字母大战";
      this.BackColor = Color.FromArgb(80, 00, 80);
      // this.BackgroundImage = Image.FromStream(@"");
      this.Left = Screen.PrimaryScreen.WorkingArea.Width / 2 - this.Width / 2;
      this.Top = Screen.PrimaryScreen.WorkingArea.Height / 2 - this.Height / 2;

      // 创建游戏区
      BG.Width = 800;
      BG.Height = 600;
      BG.BackColor = Color.White;
      this.Controls.Add(BG);
      BG.Location = new Point(20, 20);

      // 字母生成
      CreateTime.Interval = 1000; // 设置生成毫秒数
      CreateTime.Tick += CreateTime_Tick;

      // 控制下落 Flytime
      Flytime.Interval = 40;
      Flytime.Tick += Flytime_Tick;

      //创建的飞机
      player.Size=new Size(80, 80);
      player.Top = BG.Height - player.Height-50;
      player.Left = BG.Width / 2 - player.Width / 2;
      player.Image = Image.FromFile(@"../../img/YP03.png");
      player.SizeMode = PictureBoxSizeMode.StretchImage; // 自适应大小
      player.Tag = "player";
      BG.Controls.Add(player);

      // 创建尾气 两个对象
      feijwei1.Size = new Size(15, 30);
      feijwei1.Tag = 0;
      feijwei1.Top = player.Top + player.Height+feijwei1.Height/2-15;
      feijwei1.Left = player.Left + player.Width / 2 -feijwei1.Width-5;
      feijwei1.Image = imageList2.Images[0];
      BG.Controls.Add(feijwei1);
      feijwei2.Size = new Size(15, 30);
      feijwei2.Tag = 0;
      feijwei2.Top= player.Top + player.Height + feijwei1.Height / 2 -15;
      feijwei2.Left = player.Left + player.Width / 2 + feijwei1.Width-5;
      feijwei2.Image = imageList3.Images[0];
      BG.Controls.Add(feijwei2);

      // 尾气1定时器
      Timer weiqitimer1 = new Timer();
      weiqitimer1.Tag = feijwei1;
      weiqitimer1.Tick += Weiqitimer1_Tick;
      weiqitimer1.Start();
      //尾气2定时器
      Timer weiqitimer2 = new Timer();
      weiqitimer2.Tag = feijwei2;
      weiqitimer2.Tick += Weiqitimer2_Tick;
      weiqitimer2.Start();

      //添加键盘事件
      this.KeyPress += Form1_KeyPress;
      // 创建按钮区
      cebainqu.Width = 160;
      cebainqu.Height = 600;
      cebainqu.Location = new Point(820,20);
      cebainqu.BackColor = Color.FromArgb(180, 15, 123);
      this.Controls.Add(cebainqu);

      // 创建按钮
      btn.Location = new Point(20, 20);
      btn.BorderStyle = BorderStyle.FixedSingle;
      btn.AutoSize = true;
      btn.Text = "游戏开始";
      btn.Cursor = Cursors.Hand; // 鼠标移入到变为手型
      btn.Font = new Font("", 15);
      btn.ForeColor = Color.FromArgb(97,177,48);
      btn.BackColor = Color.FromArgb(191,143,243);
      cebainqu.Controls.Add(btn);
      btn.Click += Btn_Click;
      // 得分卡
      defeng.Font = new Font("", 15);
      defeng.Location = new Point(20, 50);
      defeng.AutoSize = true;
      defeng.Text = "得分: "+count+"分";
      cebainqu.Controls.Add(defeng);
      //血条字体
      Label xueTiao = new Label();
      xueTiao.Text = " 能量";
      xueTiao.Size = new Size(100, 30);
      xueTiao.Font = new Font("楷体",20);
      xueTiao.ForeColor = Color.Yellow;
      xueTiao.Location = new Point(20, 70);
      cebainqu.Controls.Add(xueTiao);
      // 血条
      xuetiao.Size = new Size(100, 20);
      xuetiao.BackColor = Color.Red;
      xuetiao.Location = new Point(20, 100);
      cebainqu.Controls.Add(xuetiao);
      // 血条底部
      Label xuetdi = new Label();
      xuetdi.Size = new Size(100, 20);
      xuetdi.BackColor = Color.White;
      xuetdi.Location = new Point(20, 100);
      cebainqu.Controls.Add(xuetdi);
    }

    //飞机尾气定时器1
    private void Weiqitimer1_Tick(object sender, EventArgs e)
    {
      Timer weiqi1 = sender as Timer;
      PictureBox weiQi = weiqi1.Tag as PictureBox;
      weiQi.Image = imageList2.Images[(int)weiQi.Tag];
      weiQi.Tag = (int)weiQi.Tag + 1;
      if ((int)weiQi.Tag > 1)
      {
        weiQi.Tag = 0;
      }
    }
    //飞机尾气定时器2
    private void Weiqitimer2_Tick(object sender, EventArgs e)
    {
      Timer weiqi2 = sender as Timer;
      PictureBox weiQi = weiqi2.Tag as PictureBox;
      weiQi.Image = imageList3.Images[(int)weiQi.Tag];
      weiQi.Tag = (int)weiQi.Tag + 1;
      if ((int)weiQi.Tag>1)
      {
        weiQi.Tag = 0;
      }
    }
    // 游戏开始/暂停
    private void Btn_Click(object sender, EventArgs e)
    {
      //Label btn = (Label)sender; // 获取始发者
      if (btn.Text=="游戏开始")
      {
        CreateTime.Start(); // 字母生成定时器启动
        Flytime.Start(); // 字母下落定时器启动
        btn.BackColor = Color.Red;
        btn.ForeColor = Color.White;
        btn.Text = "游戏暂停";
      }
      else if(btn.Text=="游戏暂停")
      {
        CreateTime.Stop(); // 字母生成定时器关闭
        Flytime.Stop(); // 字母下落定时器关闭
        btn.BackColor = Color.FromArgb(191, 143, 243);
        btn.ForeColor = Color.FromArgb(97, 177, 48);
        btn.Text = "游戏开始";
      }
    }

    private void CreateTime_Tick(object sender, EventArgs e)
    {
      // 生成字母在label中
      Label lb = new Label();
      lb.Text = ((char)rand.Next(97, 123)).ToString(); // 97-123 随机ASCLL字母
      lb.Font = new Font("", rand.Next(20, 30)); // 字体随机15-20
      lb.ForeColor =Color.FromArgb(rand.Next(256), rand.Next(256), rand.Next(256));
      lb.Top = 0;
      lb.Left = rand.Next(0, BG.Width - lb.Width); // 随机到游戏区的宽度
      lb.AutoSize = true; // 自适应大小
      lb.BackColor = Color.Transparent; // 透明
      lb.Tag = "zimu";
      BG.Controls.Add(lb); // 字母添加到游戏区
      labels.Add(lb); // 字母添加到labels中
    }
    // 控件字母下落,子弹上升
    private void Flytime_Tick(object sender, EventArgs e)
    {
      foreach (Control item in BG.Controls)
      {
        if (item.Tag.ToString()=="zimu" || item.Tag.ToString() == "biaoji")
        {
          item.Top += 5;
          if (item.Top > BG.Height) // 字母超过bg高度 字母删除
          {
            item.Dispose();
            xuetiao.Width -= 10;
            if (xuetiao.Width==0)
            {
              CreateTime.Stop(); // 字母生成定时器关闭
              Flytime.Stop(); // 字母下落定时器关闭
              qing();// 调用清除字母方法
              zdqing(); // 调用清除子弹方法
              xuetiao.Size = new Size(100, 20);// 显示血条
              defeng.Text = "得分: " + count + "分";
              btn.Text = "游戏开始";
              // MessageBox.Show弹框第一个参数为弹框内容,第二参数为标题,第三个参数为按钮,第四个参数为图标
              MessageBox.Show("游戏结束"+"得分为:"+count+"分","游戏结束",MessageBoxButtons.YesNo,MessageBoxIcon.Information);
              count = 0;
              defeng.Text = "得分: " + count + "分";
            }
          }
        }
        //判断子弹
        if (item.Tag.ToString()=="zidan")
        {
          item.Top -= 5;
          if (item.Top<0) // 当子弹超出bg高度 子弹删除
          {
            item.Dispose();
          }
          foreach (Control zm in BG.Controls)
          {    // 子弹碰到字母
            if (zm.Tag.ToString()=="biaoji")
            {
              if (item.Top<=zm.Top+zm.Height && item.Left+item.Width/2==zm.Left+zm.Width/2) // 子弹的位置小于字母的位置 子弹穿过字母
              { // 子弹,字母消失
                item.Dispose();
                zm.Dispose();
                // 播放动画
                PictureBox bombBox = new PictureBox(); // 动画对象
                bombBox.Tag = 0; // 给bombBox的属性Tag 设置为0 是为遍历动画图片
                bombBox.Size = new Size(50, 50);
                // 设置爆炸图片在字母位置
                bombBox.Location = new Point(zm.Left + zm.Width / 2 - bombBox.Width / 2, zm.Top - zm.Height / 2 + bombBox.Height / 2);
                BG.Controls.Add(bombBox); // 添加到游戏区

                // 动画添加定时器
                Timer bombTimer = new Timer();
                bombTimer.Tag = bombBox; // 将bombBox存储到bombTimer的Tag属性中
                bombTimer.Interval = 10;
                bombTimer.Tick += BombTimer_Tick;
                bombTimer.Start();// 开启定时器
                // 记录得分
                count++;
                defeng.Text = "得分: " + count.ToString() + "分";
                // 开启爆炸声音
                baozhasound.Play();
              }
            }
          }
        }
      }
    }
    // 爆炸定时器
    private void BombTimer_Tick(object sender, EventArgs e)
    {
      Timer bombtimer = (Timer)sender; // BombTimer的发起者 即bombTimer,重新bombtimer名
      PictureBox picture = (PictureBox)bombtimer.Tag;// 获取bombTimer的Tag属性,即bombBox
      picture.Image = imageList1.Images[(int)picture.Tag];// 添加图片
      picture.Tag = (int)picture.Tag + 1; // 索引加1
      if ((int)picture.Tag>31) // 超过索引为31时,定时器清除,图片清除
      {
        bombtimer.Dispose();
        picture.Dispose();
      }
    }

    // 键盘事件
    private void Form1_KeyPress(object sender, KeyPressEventArgs e)
    {
      // 事件 e参数
      foreach (Control item in BG.Controls)
      {
        // 判断按键值和字母对应
        if (item.Text==e.KeyChar.ToString()&& item.Tag.ToString()=="zimu")
        {
          item.Tag = "biaoji";
          //飞机的移动   飞机的left=字母的left+字母的width-飞机的width/2;
          player.Left = item.Left + item.Width / 2 - player.Width / 2; 

          // 尾气移动
          feijwei1.Left = player.Left + player.Width / 2 - feijwei1.Width - 5;
          feijwei2.Left = player.Left + player.Width / 2 + feijwei1.Width - 5;

          // 创建子弹
          PictureBox bullet = new PictureBox();
          bullet.Size = new Size(8,28);
          bullet.Tag = "zidan";
          bullet.Image = Image.FromFile(@"../../img/Ammo1.png");
          bullet.SizeMode = PictureBoxSizeMode.StretchImage; // 自适应大小
          bullet.Left = player.Left + player.Width / 2 - bullet.Width / 2; // 在飞机上面
          bullet.Top = player.Top - bullet.Height;
          BG.Controls.Add(bullet);
          picts.Add(bullet); // 子弹添加到picts中
          return;  // 跳出创建 只创建一颗子弹
        }
      }
    }
    // 字母清除方法
    private void qing()
    {
      foreach (Label item in labels)
      {
        item.Dispose();
      }
    }
    // 子弹清除方法
    private void zdqing()
    {
      foreach (PictureBox item in picts)
      {
        item.Dispose();
      }
    }

    // 任务栏中右键点击关闭事件
    private void 关闭ToolStripMenuItem_Click(object sender, EventArgs e)
    {
      this.Close();// 关闭窗体
    }
  }
}

到此这篇关于C#飞机打字游戏的代码示例(winform版)的文章就介绍到这了,更多相关C#飞机打字游戏内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

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

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

  • C#实现简单打字游戏

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

  • C#实现打字游戏

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

  • 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 打字游戏实现代码

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

  • C语言实现推箱子游戏的代码示例

    很早就想过做点小游戏了,但是一直没有机会动手.今天闲来无事,动起手来.过程还是蛮顺利的,代码也不是非常难.今天给大家分享一下~ 一.介绍 开发语言:C语言 开发工具:Dev-C++ 5.11 日期:2019年9月28日 作者:ZackSock 也不说太多多余的话了,先看一下效果图: 游戏中的人物.箱子.墙壁.球都是字符构成的.通过wasd键移动,规则的话就是推箱子的规则,也就不多说了. 二.代码实现 关于代码方面,我尽可能讲的细致.希望大家可以理解~ (1)方法列表 //主函数 void mai

  • 基于JS实现飞机大战游戏的示例代码

    目录 演示 技术栈 源码 定义敌方战机 定义我方战机 碰撞检测 演示 技术栈 今天没有什么特别要讲的,要不我们提前介绍下次要做的技术吧.你不说话就是同意了.我们开始了. 下图是正则表达式的一些总结大家可以先看看哦 (function() { /** * 1. JavaScript使用正则式的函数 */ const str = "abchelloasdasdhelloasd"; // 1. 查找 console.log(str.search("h")); // 3 /

  • 500行代码使用python写个微信小游戏飞机大战游戏

    这几天在重温微信小游戏的飞机大战,玩着玩着就在思考人生了,这飞机大战怎么就可以做的那么好,操作简单,简单上手. 帮助蹲厕族.YP族.饭圈女孩在无聊之余可以有一样东西让他们振作起来!让他们的左手 / 右手有节奏有韵律的朝着同一个方向来回移动起来! 这是史诗级的发明,是浓墨重彩的一笔,是-- 在一阵抽搐后,我结束了游戏,瞬时觉得一切都索然无味,正在我进入贤者模式时,突然想到,如果我可以让更多人已不同的方式体会到这种美轮美奂的感觉岂不美哉? 所以我打开电脑,创建了一个 plan_game.py-- 先

  • Android实现老虎机小游戏代码示例

    用 Android studio软件写的一个老虎机小游戏 先上MainActivity.java 的代码.这里我用得定时器,本想用java线程,奈何安卓还不太会,应用会闪退. package com.example.myapplication; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.os.Handler; import android.view.View;

  • Java实现经典游戏2048的示例代码

    目录 前言 主要设计 功能截图 代码实现 界面布局类 业务逻辑类 总结 前言 2014年Gabriele Cirulli利用周末的时间写2048这个游戏的程序,仅仅只是好玩而已.他想用一种不同的视觉展现效果和更快速的动画来创造属于自己的游戏版本. 游戏是用java语言实现,采用了swing技术进行了界面化处理,设计思路用了面向对象思想. 主要需求 每次控制所有方块向同一个方向运动,两个相同数字的方块撞在一起之后合并成为他们的和,每次操作之后会在空白的方格处随机生成一个2或者4,最终得到一个“20

  • Java实现经典游戏打砖块游戏的示例代码

    目录 前言 主要设计 功能截图 代码实现 游戏核心类 小球类 砖块类 总结 前言 <JAVA打砖块>游戏是自制的游戏.玩家操作一根萤幕上水平的“棒子”,让一颗不断弹来弹去的“球”在撞击作为过关目标消去的“砖块”的途中不会落到萤幕底下. 主要设计 设计游戏界面,用swing实现 设计砖块,砖块类, 设计小球,满屏乱跑的小球类,负责打碎砖块 设计棒子,左右移动的木头板类 球碰到砖块.棒子与底下以外的三边会反弹,落到底下会失去一颗球,把砖块全部消去就可以破关. 小球碰到砖块的回调算法设计 小球碰到棒

  • Java实现经典游戏超级玛丽的示例代码

    目录 前言 主要设计 功能截图 代码实现 游戏主界面 马里奥 小怪 总结 前言 在你的童年记忆里,是否有一个蹦跳.顶蘑菇的小人? 如果你回忆起了它,你定然会觉得现在它幼稚.无聊,画面不漂亮,游戏不精彩……但请你记住:这才是真正的游戏,它给了你无限的欢乐! 马里奥是靠吃蘑菇成长,闻名世界的超级巨星.特征是大鼻子.头戴帽子.身穿背带工作服.还留着胡子. 如此经典的游戏,你怎么能错过,快来玩玩吧. <超级玛丽>游戏是用java语言实现,采用了swing技术进行了界面化处理,设计思路用了面向对象思想.

随机推荐