C#实现简单打字小游戏
作者:oOo!!!!!----蔚楠 发布时间:2023-02-25 06:46:50
标签: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.Forms;
namespace 打字游戏
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
Random r = new Random();
//游戏区
Panel Gamearea = new Panel();
//控制区
Panel area = new Panel();
//装鸟的盒子
PictureBox Bird = new PictureBox();
//字母出现定时器
Timer zimu = new Timer();
//飞鸟与字母下落定时器
Timer fly = new Timer();
//开始/暂停按钮
Button button = new Button();
//积分器
Label scoring = new Label();
//血条
Label Bar = new Label();
//尾翼
PictureBox wei = new PictureBox();
PictureBox weiyi = new PictureBox();
//装字母的盒子
List<Label> zmbox = new List<Label>();
private void Form1_Load(object sender, EventArgs e)
{
//button设置
this.KeyPreview = true;
//最大化窗口
this.WindowState = FormWindowState.Maximized;
//背景图
this.BackgroundImage = Image.FromFile("../../img/背景 (2).jpg");
//拉伸
this.BackgroundImageLayout = ImageLayout.Stretch;
//游戏区设置
Gamearea.Size = new Size(1000,750);
//游戏区位置
Gamearea.Location = new Point(30,30);
this.Controls.Add(Gamearea);
Gamearea.Tag = "game";
//控制区设置
area.Size = new Size(300,750);
//控制区位置
area.Location = new Point(Gamearea.Left+Gamearea.Width+20,30);
area.BackColor = Color.Cyan;
this.Controls.Add(area);
//开始/暂停按钮
//Button button = new Button();
button.Text = "开始";
this .KeyPreview = true;
//字体大小
button.Font = new Font("",20);
//按钮大小
button.Size = new Size(100,50);
//按钮颜色
button.BackColor = Color.Blue;
//按钮位置
button.Location = new Point(100,20);
area.Controls.Add(button);
//按钮点击事件
button.Click += Button_Click;
//积分器
//Label scoring = new Label();
scoring.Text = "积分:0";
scoring.Font = new Font("",15);
scoring.Location = new Point(100,100);
area.Controls.Add(scoring);
//装鸟的盒子设置
Bird.Tag = "niao";
Bird.Size = new Size(200,200);
Bird.Location = new Point(0,0);
//动画放入盒子
Bird.Image = imageList1.Images[0];
Gamearea.Controls.Add(Bird);
//飞鸟与字母下落定时器
//Timer fly = new Timer();
fly.Interval = 80;
fly.Tick += Fly_Tick;
//fly.Start();
//字母出现定时器
//Timer zimu = new Timer();
zimu.Interval = 1000;
zimu.Tick += Zimu_Tick;
//zimu.Start();
//键盘
this.KeyPress += Form1_KeyPress1;
//飞机
//PictureBox plane = new PictureBox();
plane.Tag = "plane";
//盒子大小
plane.Size = new Size(100,100);
//放进图片
plane.Image = Image.FromFile("../../img/RP03.png");
//图片自适应
plane.SizeMode = PictureBoxSizeMode.StretchImage;
//飞机位置
plane.Location = new Point(Gamearea.Width/2-plane.Width/2,Gamearea.Height-plane.Height-60);
Gamearea.Controls.Add(plane);
//血条
//Label Bar = new Label();
Bar.Tag = "bar";
Bar.Size = new Size(100, 10);
Bar.BackColor = Color.Red;
//位置
Bar.Left = plane.Left + plane.Width - Bar.Width;
Bar.Top = plane.Top - Bar.Height;
Gamearea.Controls.Add(Bar);
//尾翼
wei.Tag = "wei";
wei.Size = new Size(30, 40);
//位置
wei.Left = plane.Left + plane.Width / 2;
wei.Top = plane.Top + plane.Height;
//图片集放进盒子
wei.Image = imageList3.Images[0];
Gamearea.Controls.Add(wei);
weiyi.Tag = "weiji";
//图片集放进盒子
weiyi.Image = imageList3.Images[0];
weiyi.Size = new Size(30, 40);
//位置
weiyi.Left = plane.Left + plane.Width /2-28;
weiyi.Top = plane.Top + plane.Height;
Gamearea.Controls.Add(weiyi);
}
//按钮设置
private void Button_Click(object sender, EventArgs e)
{
if (button.Text=="开始")
{
fly.Start();
zimu.Start();
button.Text = "暂停";
}
else if (button.Text=="暂停")
{
fly.Stop();
zimu.Stop();
button.Text = "开始";
}
}
//飞机
PictureBox plane = new PictureBox();
//键盘事件
private void Form1_KeyPress1(object sender, KeyPressEventArgs e)
{
//遍历游戏区内所有控件
foreach (Control item in Gamearea.Controls)
{
//找到name为Label的控件
if (item.GetType().Name == "Label")
{
//判断按键与字母是否相同
if (item.Text == e.KeyChar.ToString()&& item.Tag.ToString() == "zm")
{
////消除字母
//item.Dispose();
plane.Left = item.Left + item.Width / 2 - plane.Width / 2;
//血条随飞机
Bar.Left = plane.Left + plane.Width - Bar.Width;
Bar.Top = plane.Top - Bar.Height;
//尾翼随飞机
wei.Left = plane.Left + plane.Width / 2;
wei.Top = plane.Top + plane.Height;
weiyi.Left = plane.Left + plane.Width / 2 - 28;
weiyi.Top = plane.Top + plane.Height;
item.Tag = "bj";
//创造 *
PictureBox bullet = new PictureBox();
bullet.Tag = "bullet";
bullet.Size = new Size(10,30);
//放进图片
bullet.Image = Image.FromFile("../../img/Ammo1.png");
//图片自适应
bullet.SizeMode = PictureBoxSizeMode.StretchImage;
// * 位置
bullet.Location = new Point(plane.Left+plane.Width/2-bullet.Width/2,plane.Top-bullet.Height);
Gamearea.Controls.Add(bullet);
return;
}
}
}
}
//字母
private void Zimu_Tick(object sender, EventArgs e)
{
//判断飞鸟出现屏幕字母开始下落
if (Bird.Left >= 0 && Bird.Left <= Gamearea.Width - Bird.Width)
{
Label zm = new Label();
zm.Tag = "zm";
//随机字母
zm.Text =((char)r.Next(97,123)).ToString();
//随机大小
zm.Font = new Font("",r.Next(10,45));
//字体自适应
zm.AutoSize = true;
//随机颜色
zm.ForeColor = Color.FromArgb(r.Next(255), r.Next(255), r.Next(255));
//随着鸟的位置下落
zm.Top = Bird.Height;
zm.Left = Bird.Left + Bird.Width / 2 - zm.Width / 2;
//添加进游戏区
Gamearea.Controls.Add(zm);
zmbox.Add(zm);
}
}
//播放飞鸟动画
int bo = 0;
//积分
int fen = 0;
int t = 0, y = 0;
private void Fly_Tick(object sender, EventArgs e)
{
//飞鸟动画播放
Bird.Image = imageList1.Images[bo];
bo++;
//图片播放完重零开始重新播放
if (bo >= imageList1.Images.Count)
{
bo = 0;
}
//遍历控件
foreach (Control item in Gamearea.Controls)
{
//鸟飞
if (item.Tag.ToString()=="niao")
{
item.Left += 10;
//超出边界重新开始飞
if (item.Left>=Gamearea.Width)
{
item.Left = -item.Width;
}
}
//字母下落
if (item.Tag.ToString() == "zm"||item.Tag.ToString()=="bj")
{
item.Top += 10;
//超出下边界清除
if (item.Top+item.Height>=Gamearea.Height)
{
item.Dispose();
Bar.Width -= 10;
//判断血条为零时
if (Bar.Width==0)
{
fly.Stop();
zimu.Stop();
//弹框
if ( MessageBox.Show("游戏结束,积分为:"+fen,"Game Over", MessageBoxButtons.RetryCancel, MessageBoxIcon.Warning) == DialogResult.Retry)
{
fly.Stop();
zimu.Stop();
//满血条
Bar.Width = 100;
//按钮变开始
button.Text = "开始";
//积分清零
scoring.Text = "积分:0";
//鸟回归原位
Bird.Location = new Point(0, 0);
//清屏
qingping();
}
else
{
this.Close();
}
}
}
}
// * 上升
if (item.Tag.ToString() == "bullet")
{
item.Top -= 10;
//超出上边界清除
if (item.Top==-item.Top)
{
item.Dispose();
}
//重新遍历
foreach (Control letter in Gamearea.Controls)
{
//找到字母
if (letter.Tag.ToString() == "bj")
{
//判断字母与 * 相遇
if (item.Top <= letter.Top + letter.Height && item.Left + item.Width / 2 == letter.Left + letter.Width / 2)
{
item.Dispose();
letter.Dispose();
//积分自加
fen++;
//写入控制区
scoring.Text = "积分:" + fen;
//创造 *
PictureBox detonate = new PictureBox();
//记录播放图片从零开始
detonate.Tag = 0;
//盒子大小
detonate.Size = new Size(50,50);
//将图片放进盒子
detonate.Image = imageList2.Images[0];
//图片自适应
detonate.SizeMode = PictureBoxSizeMode.StretchImage;
// * 位置
detonate.Location = new Point(letter.Left + letter.Width / 2 - detonate.Width / 2, letter.Top + letter.Height / 2 - detonate.Height / 2);
Gamearea.Controls.Add(detonate);
// * timer
Timer zha = new Timer();
// * 图片放进timer
zha.Tag = detonate;
zha.Interval = 100;
zha.Tick += Zha_Tick;
zha.Start();
}
}
}
}
//尾翼动画播放
wei.Image = imageList3.Images[t];
t++;
if (t >= imageList3.Images.Count)
{
t = 0;
}
weiyi.Image = imageList3.Images[y];
y++;
if (y >= imageList3.Images.Count)
{
y = 0;
}
}
}
private void Zha_Tick(object sender, EventArgs e)
{
//获取timer
Timer zha = (Timer)sender;
//从盒子获取图片集
PictureBox picture = (PictureBox)zha.Tag;
//获取imageList2中图片
picture.Image = imageList2.Images[(int)picture.Tag];
//图片播放
picture.Tag = (int)picture.Tag + 1;
//一组 * 图播完清除
if ((int)picture.Tag == 32)
{
zha.Dispose();
picture.Dispose();
}
}
//清屏字母
private void qingping()
{
foreach (Label lazm in zmbox)
{
lazm.Dispose();
}
}
}
}
更多有趣的经典小游戏实现专题,也分享给大家:
C++经典小游戏汇总
python经典小游戏汇总
python俄罗斯方块游戏集合
JavaScript经典游戏 玩不停
java经典小游戏汇总
javascript经典小游戏汇总
来源:https://blog.csdn.net/weixin_45105458/article/details/103241880


猜你喜欢
- 使用异步包(推荐)async包由 Dart 编程语言的作者开发和发布。它提供了dart:async风格的实用程序来增强异步计算。可以帮助我们
- 在学习操作系统这本书的时候,我们使用的是汤小丹老师的《计算机操作系统》接下来我将会使用java语言去实现内部代码。Swap指令最佳置换算法是
- 普通校验导入依赖:默认的报错:没有提示具体的属性设置自己的错误信息提示:创建 ValidationMessages.properties内容
- 导入mybatis jar包右键pom.xml模拟springboot底层实现类1.定义接口@Mapperpublic interface
- 1、Jetbrains官网下载IntelliJ IDEA1.1 官方网站http://www.jetbrains.com/idea/&nbs
- 在有些需求中会遇到,当鼠标滑过某个UI物体上方时,为了提醒用户该物体是可以交互时,我们需要添加一个动效和提示音。这样可以提高产品的体验感。解
- 本文实例为大家分享了WPF ProgressBar实现实时进度的具体代码,供大家参考,具体内容如下简单测试,页面如图:利用上班的一点点空闲时
- 目录概述事件监听的结构Publisher,Event和Listener的关系事件发布者监听者总结概述ApplicationEvent以及Li
- 两种情况setState() 能在 build() 中直接调用吗?答案是能也不能。来看一段简单的代码:import 'package
- 最近 Google 已经发布 Android 新版本 7.0 Nougat (牛轧糖) ,相信Android手机用户在未来的几个月内会收到第
- 1. 什么是静态内部类在Java中有静态代码块、静态变量、静态方法,当然也有静态类,但Java中的静态类只能是Java的内部类,也称为静态嵌
- this:this理解为:当前对象 或 当前正在创建的对象可以调用的结构:属性、方法;构造器this调用属性、方法:先了解一下形参:形参的意
- 现在我们的手机一般都内置有方向感应器,手机屏幕会根据所处位置自动进行横竖屏切换(前提是未锁定屏幕方向)。但有时我们的应用程序仅限在横屏或者竖
- 一、Javassist入门(一)Javassist是什么Javassist是可以动态编辑Java字节码的类库。它可以在Java程序运行时定义
- 消息的保存路径消息发送端发送消息到 broker 上以后,消息是如何持久化的?数据分片kafka 使用日志文件的方式来保存生产者和发送者的消
- 一 前言springboot 额外的特色是提供了后台应用监控,可以通过 HTTP 或者 JMX的方式管理监控应用,本文主讲HTTP方式;其主
- 这篇文章主要介绍了springboot跨域CORS处理代码解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,
- 前言 在微信刚流行的时候,在摇一摇还能用来那啥的时候,我也曾深更半夜的拿着手机晃一晃。当时想的最多的就是
- 一、opsForValue用法key:字符串,value:可以是任意对象Object(例如String、具体对象如自定义类Student等)
- Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码。 1.方法声明时使