C#小项目飞翔的小鸟游戏详细教程(Flying bird),基于Winform框架

实现效果:
1.空格,鼠标左键控制小鸟跳
2.管道随机大小
3.小鸟与管道碰撞,小鸟碰到地面
4.小鸟煽动翅膀动画
5.开始暂停游戏
6.过一个管道得分增加

设计界面拖控件:
得分控件:lable,
开始/继续游戏图片PictureBox,>小鸟图片PictureBox(默认隐藏)
地面图片:PictureBox


代码奉上,请各位大佬点评

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.Threading;namespace 小鸟撞杠子
{public partial class Form1 : Form{public Form1(){InitializeComponent();}/// <summary>///  本项目的全局变量/// </summary>/// int gap = 150;       // 两根管子的间隔List<PictureBox> piclist = new List<PictureBox>(); // 存储管子的泛型集合Random ran = new Random();  // 随机数类int i = 0;                  // 小鸟动画切换图片  int speed = 15;             // 小鸟跳一次的高度int score = 0;              // 得分// 窗体加载事件private void Form1_Load(object sender, EventArgs e){// 窗体固定单边框,this.FormBorderStyle = FormBorderStyle.FixedSingle;}private void timer1_Tick(object sender, EventArgs e){// 小鸟掉地上检测// 小鸟的top+小鸟的height大于等于地面的topif (Birdimg.Top+Birdimg.Height>=pictureBox1.Top){timer1.Stop();timer2.Stop();timer3.Stop();// 解绑键盘鼠标事件this.KeyPress -= Form1_KeyPress;this.MouseClick -= Form1_MouseClick;// 显示结束动画pictureBox2.Visible = true;}// 小鸟动画播放i++;if (i>2){i = 0;}Birdimg.BackgroundImage = Image.FromFile(@"../../img/bird0_" + i+".png");// 小鸟移动Birdimg.Left += 1;Birdimg.Top += 3;// 检测碰撞foreach (Control item in this.Controls){if (item.Tag.ToString()=="gangzi"||item.Tag.ToString()=="gangzi1"){// 调用碰撞方法传入实参(小鸟与杠子)bool iss = Penggangzi(Birdimg,item);if (iss==true){ timer1.Stop();timer2.Stop();timer3.Stop();this.KeyPress -= Form1_KeyPress;this.MouseClick -= Form1_MouseClick;pictureBox2.Visible = true;MessageBox.Show("点击GAME OVER按钮继续游戏!!!");}}}}// 管子生成方法private void Guan(){int hei = ran.Next(80, 200);// 上方的管子PictureBox pipe_down = new PictureBox();pipe_down.Tag = "gangzi";pipe_down.BackgroundImage = Image.FromFile(@"../../img/pipe_down.png");pipe_down.Location = new Point(this.Width, 0);pipe_down.Size = new Size(60, hei);pipe_down.BackgroundImageLayout = ImageLayout.Stretch;piclist.Add(pipe_down);this.Controls.Add(pipe_down);// 下方的管子PictureBox pipe_up = new PictureBox();pipe_up.Tag = "gangzi1";pipe_up.BackgroundImage = Image.FromFile(@"../../img/pipe_up.png");pipe_up.Size = new Size(60, this.Height - hei - gap-pictureBox1.Height);pipe_up.Location = new Point(this.Width, this.Height - pipe_up.Height-pictureBox1.Height);pipe_up.BackgroundImageLayout = ImageLayout.Stretch;this.Controls.Add(pipe_up);piclist.Add(pipe_up);}// 碰撞检测方法public bool Penggangzi(Control bird,Control gangzi){int bird1Left = bird.Left;int bird1Right = bird1Left + bird.Width;int bird1Top = bird.Top;int bird1Bottom = bird1Top + bird.Height;int gangzi2Left = gangzi.Left;int gangzi2Right = gangzi2Left + gangzi.Width;int gangzi2Top = gangzi.Top;int gangzi2Bottom = gangzi2Top + gangzi.Height;// 小鸟的右边 大于等于 杠子的左边// 小鸟的下边 大于等于 杠子的上边// 小鸟的左边 小于等于 杠子的右边// 小鸟的上边 小于等于 杠子的下边if (bird1Right >= gangzi2Left && bird1Bottom >= gangzi2Top && bird1Left <= gangzi2Right && bird1Top <= gangzi2Bottom){// 已经发生碰撞return true;}else{// 没有碰撞return false;}}// 空格按键控制小鸟跳private void Form1_KeyPress(object sender, KeyPressEventArgs e){if (e.KeyChar==(char)Keys.Space){speed++;Birdimg.Top -= speed;}}// 鼠标单击、小鸟跳private void Form1_MouseClick(object sender, MouseEventArgs e){if (e.Button==MouseButtons.Left){speed++;Birdimg.Top -= speed;}}// 计时器控制管子移动private void timer2_Tick(object sender, EventArgs e){foreach (Control item in this.Controls){if (item.Tag.ToString()=="gangzi"|| item.Tag.ToString() == "jilu"||item.Tag.ToString()=="gangzi1"){// 管子的left小于-管子的宽度,管子出屏幕,管子消失if (item.Left<=-item.Width){item.Dispose();}// 管子的left小于-管子的宽度/2,加分,变tag以防多加else if (item.Left<=-item.Width/2){if (item.Tag.ToString() == "gangzi"){score+=1;label1.Text = score.ToString();}item.Tag = "jilu";}item.Left -= 6;}}}// 创建管子计时器private void timer3_Tick(object sender, EventArgs e){Guan();}// 开始游戏/game over界面private void pictureBox2_Click(object sender, EventArgs e){if (pictureBox2.Tag.ToString()=="开始游戏"){pictureBox2.BackgroundImage = Image.FromFile(@"../../img/text_game_over.png");pictureBox2.Tag = "游戏结束";pictureBox2.Visible = false;pictureBox3.Visible = true;Birdimg.Visible = true;// 鸟移动计时器timer1.Interval = 40;timer1.Start();// 管子移动计时器timer2.Interval = 20;timer2.Start();// 管子创建timer3.Interval = 1500;timer3.Start();}else{score = 0;label1.Text = score.ToString();pictureBox2.Visible = false;pictureBox3.Visible = true;Birdimg.Visible = true;qingping();Birdimg.Location = new Point(23,130);this.KeyPress +=Form1_KeyPress;this.MouseClick += Form1_MouseClick;// 鸟移动计时器timer1.Interval = 40;timer1.Start();// 管子移动计时器timer2.Interval = 30;timer2.Start();// 管子创建timer3.Interval = 1500;timer3.Start();}}// 暂停开始小按钮private void pictureBox3_Click(object sender, EventArgs e){if (pictureBox3.Tag.ToString()=="暂停"){timer1.Stop();timer2.Stop();timer3.Stop();pictureBox3.Tag = "开始";pictureBox3.BackgroundImage = Image.FromFile(@"../../img/button_resume.png");}else{timer1.Start();timer2.Start();timer3.Start();pictureBox3.Tag = "暂停";pictureBox3.BackgroundImage = Image.FromFile(@"../../img/button_pause.png");}}// 清屏幕private void qingping(){foreach (PictureBox item in piclist){item.Dispose();}}}
}

C#小项目飞翔的小鸟游戏详细教程(Flying bird),基于Winform框架相关推荐

  1. H5飞翔的小鸟游戏微信小程序源码

    Java SpringMVC+H5飞翔的小鸟游戏微信小程序源码 试验性质的一个微信小程序,用canvas做的一个类似flappy-bird的小游戏. 包含一些基本的功能:躲避障碍物.计分.排行榜等等. ...

  2. Java SpringMVC+H5飞翔的小鸟游戏微信小程序源码

    源码介绍 Java SpringMVC+H5飞翔的小鸟游戏微信小程序源码 试验性质的一个微信小程序,用canvas做的一个类似flappy-bird的小游戏. 包含一些基本的功能:躲避障碍物.计分.排 ...

  3. 最新H5开发飞翔的小鸟游戏微信小程序源码

    正文: Java SpringMVC+H5飞翔的小鸟游戏微信小程序源码. 试验性质的一个微信小程序,用canvas做的一个类似flappy-bird的小游戏. 包含一些基本的功能:躲避障碍物.计分.排 ...

  4. java 拼图游戏_Java小项目之:拼图游戏!

    Java小项目之:拼图游戏! 今天教大家用java做出一个拼图游戏,很适合java初学者练手. 所用素材: 部分代码: package picture_mosical; import java.awt ...

  5. Java项目打包成exe的详细教程

    Java项目打包成exe的详细教程 把Java项目打包成exe共分为以下两步: 1. 利用Eclipse先把Java项目先打成jar包 2. 利用exe4j工具把jar包转成exe 这里以Java项目 ...

  6. 【C++】经典项目控制台贪吃蛇小游戏详细教程

    [小游戏]贪吃蛇GreedySnake 本文将讲解如何使用c++面向对象方法编写控制台版贪吃蛇小游戏 项目github地址:游戏源码链接 游戏下载:GreedySnake 本人属初学者,水平所限,难免 ...

  7. 微信小程序如何进行反编译详细教程

    前言介绍 小程序反编译,其实还是简单的,要想拿到微信小程序源码,先要拿到小程序的包,用反编译脚本跑一下,微信小程序代码包里的所有文件.所有资源就出来了(除了project.config.json小程序 ...

  8. 联想新服务器怎么装系统教程,联想小新重装win7系统的详细教程图解

    联想小新笔记本2017后新机型,其搭载intel 酷睿第6代处理器的笔记本.预装的是win10系统,用户还是喜欢win7系统,联想小新笔记本采用的第6代酷睿CPU,在安装WIN7过程中USB设备不能使 ...

  9. android飞翔的小鸟游戏素材包_开心消消乐×愤怒的小鸟:为开心而战

    手机里总有那么一些游戏,是你一旦不小心打开,就完全停不下来的.在这份"一直玩一直爽游戏清单"里,绝对少不了开心消消乐和愤怒的小鸟的身影. 神奇的是,在2020的夏天,它们合体了!在 ...

最新文章

  1. 拒绝接口裸奔!开放API接口签名验证!
  2. 选择scrum任务看板管理工具的要点
  3. PAT1052---------初步了解正则表达式
  4. unordered_map自定义key
  5. linux透明大页内存,rhel7.2 禁用透明的大页内存--transparent_hugepage(THP)
  6. HTML5性能优化需要注意的几个问题
  7. 1045 快速排序 (25 分)
  8. Excel 的点点滴滴
  9. Word 2010 制作文档结构之图标自动编号设置
  10. [js] 说说防止重复发送ajax请求的方法有哪些?各自有什么优缺点?
  11. shell脚本和python脚本和go脚本的区别_Nodejs中调用系统命令、Shell脚本和Python脚本的方法和实例-Go语言中文社区...
  12. 关于String,StringBuffer和StringBuilder之间的区别和联系
  13. I.MX6 Manufacturing Tool V2 (MFGTool2) Emmc mksdcard-android.sh hacking
  14. (面试必知)必知必会的冒泡排序和快速排序
  15. Nginx架构详解:nginx 的安装和配置
  16. 删除链表的倒数第K个结点
  17. Reinforcement Learning[论文合集]
  18. 初学Power bi项目财务与人力/利润表/人员结构-刘刘的第一篇学习记录文章
  19. 大学电路题目怎么搜_大学扫一扫题目出答案软件,可以拍照搜大学题目的app,大学电路分析搜题软件...
  20. linux终端ppt,[转]TPP:linux终端下的ppt

热门文章

  1. 残酷的真实 - 罗曼蒂克消亡史
  2. 用c语言编译烟花爆炸程序,C语言烟花程序
  3. 重出江湖,今天开始做酒店自助入住管理系统
  4. 本来WOW可以不用加入防沉迷的,现在看来不可能了
  5. 使用http-middle-ware中间件进行多个接口请求转发
  6. 关于认证Steamworks注意事项。
  7. 复试-网安开放性问题
  8. Unity 自动创建材质球工具
  9. 蜜罐 | HFish介绍
  10. 2700年前齐桓公玩弄的货币战争,今天的中国也在上演?!