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
0
投稿
猜你喜欢
- 一、题目给出二叉搜索树的根节点,该树的节点值各不相同,请你将其转换为累加树(Greater Sum Tree),使每个节点 node 的新值
- 本文实例为大家分享了java http token的具体代码,供大家参考,具体内容如下package com.monitoring.comm
- 本文实例讲述了Spring使用@Resource配置依赖操作。分享给大家供大家参考,具体如下:一 配置<?xml version=&q
- 本文实例为大家分享了Android自定义Banner轮播效果展示的具体代码,供大家参考,具体内容如下自定义View布局<Relativ
- 摘要:在spring boot中 MVC这部分也有默认自动配置,也就是说我们不用做任何配置,那么也是OK的,这个配置类就是 WebMvcAu
- 本文实例讲述了Java编程实现判断网上邻居文件是否存在的方法。分享给大家供大家参考,具体如下:由于java不支持通过//192.168.19
- 1. 需要事先将jar包 放在kettle 的 libext 目录,kettle 在启动时会自动加载libext 目录下的所有 jar 包。
- 使用DOM4J方式生成XML文件的步骤如下:引入JAR包通过DocumentHelper类的createDocument()创建Docume
- 本文实例讲述了C#实现的JS操作类。分享给大家供大家参考。具体如下:这个C#类封装了常用的JS客户端代码操作,包括弹出对话框、返回上一页,通
- 案例简述通过C#使用类似QQ窗体的功能,当窗体放置到屏幕的边缘,可以将窗体隐藏,当鼠标再次放置到屏幕边缘时,窗体可再次显示。预备知识导图功能
- 1.流布局FlowLayout所有组件像流一样,一个一个排放,排满了一行之后排下一行,默认情况下,每个组件是居中排列的,但是也可以设置。流布
- 今天查看登录日志,发现http_x_forwarded_for获取到的ip地址有些是内网ip地址,有些则是公网和内网ip地址一起获取到,用逗
- 这篇文章主要介绍了JAVA使用 * 对象进行敏感字过滤代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值
- 如果不知道,类的静态变量存储在那? 方法的局部变量存储在那? 赶快收藏Java内存区域主要可以分为共享内存,堆、方法区和线程私有内存,虚拟机
- 前言我们都知道在java中进行日期格式化使用simpledateformat。通过格式 yyyy-MM-dd 等来进行格式化,但是你知道其中
- 这周末体验了一下挺火的Docker技术,记录学习笔记。>Docker是干什么的Docker 是一个基于Linux容器(LXC-linu
- SpringBoot线程池和Java线程池的用法和实现原理使用默认的线程池方式一:通过@Async注解调用public class Asyn
- 前面有写到Spring+SpringMVC+MyBatis深入学习及搭建(二)——MyBatis原始Dao开发和mapper代理开发MyBa
- 五十七、只针对异常情况才使用异常: 不知道你否则遇见过下面的代码: &
- 引言根据 C# 语言规范,不可能从一个方法返回多个值。使用 C# 提供的一些其他功能,我们可以将多个值返回给调用者方法。本文概述了一些可用的