实例介绍
【实例简介】c#winfrom写的,用绘图技术画的
【实例截图】
【核心代码】
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Drawing.Imaging; using System.Linq; using System.Text; using System.Windows.Forms; using Game_Fly.Code; using System.IO; using Game_Fly.GameSound; namespace Game_Fly { public partial class GameUI : Form { //游戏全局 public static int elapsedFrames = 0;//累计帧数 public static Timer Time_Run;//游戏跑起的总线程 public static BackGround GameBackGround;//背景 public static Plane GamePlane;//战机 public static List<Bullet> ListBullets;//子弹 public static List<BulletTwo> ListBulletsTwo;//升级子弹 public static List<Enemy1> ListEnemy1;//敌机1 public static List<Enemy2> ListEnemy2;//敌机2 public static List<EnemyBoss> ListEnemyBoss;//敌机Boss public static List<BulletTwoPrize> ListBulletTwoPrize;//奖励子弹 public static List<LifePrize> ListLifePrize;//奖励生命 public static GameUI GameForm; /// <summary> /// 游戏初始化 /// </summary> public GameUI() { //采用双缓冲,解决角色移动屏幕闪烁 //this.SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.ResizeRedraw | ControlStyles.OptimizedDoubleBuffer, true); InitializeComponent(); //游戏组件初始化 Time_Run = Time_Game;//总线程 GameForm = this; GameBackGround = new BackGround(); GamePlane = new Plane(); ListBullets = new List<Bullet>(); ListEnemy1 = new List<Enemy1>(); ListEnemy2 = new List<Enemy2>(); ListEnemyBoss = new List<EnemyBoss>(); ListBulletsTwo = new List<BulletTwo>(); ListBulletTwoPrize = new List<BulletTwoPrize>(); ListLifePrize = new List<LifePrize>(); #region 随机播放音乐 //随机产生游戏音乐 Random randmon = new Random(); List<Stream> list_Music = new List<Stream>() { GameMusic.Bj_Music1, GameMusic.Bj_Music2, GameMusic.Bj_Music3 }; //游戏效果音乐启动 GameSound.GameSound.BackSoundPlay(list_Music[randmon.Next(0, list_Music.Count)]); #endregion } /// <summary> /// 绘制图形 /// </summary> /// <param name="e"></param> protected override void OnPaint(PaintEventArgs e) { //获得绘画设备(画笔,画板) Graphics g = e.Graphics; //绘制图像-游戏背景 GameBackGround.Draw(g); //绘制图像-游戏战机 GamePlane.Draw(g); //绘制泛型中的子弹 foreach (Bullet item in ListBullets) item.Draw(g); //绘制泛型中的子弹2 foreach (BulletTwo item in ListBulletsTwo) item.Draw(g); //敌机1 foreach (Enemy1 item in ListEnemy1) item.Draw(g); //敌机2 foreach (Enemy2 item in ListEnemy2) item.Draw(g); //敌机Boss foreach (EnemyBoss item in ListEnemyBoss) item.Draw(g); //子弹奖品 foreach (BulletTwoPrize item in ListBulletTwoPrize) item.Draw(g); //生命奖励 foreach (LifePrize item in ListLifePrize) item.Draw(g); //游戏是否结束 if (GamePlane.IsOver) { GamePlane.Life = 0; g.DrawString("等级:" GameUI.GamePlane.Grade "\n分数:" GameUI.GamePlane.HitNumber "\nGameOver 重玩[Enter]?", new Font("微软雅黑", 20), Brushes.Red, new PointF((GameUI.GameForm.ClientSize.Width - GameUI.GameBackGround.Width) / 2 GameUI.GameBackGround.Width / 3, GameUI.GameForm.ClientSize.Height / 2)); GameUI.Time_Run.Stop(); } } /// <summary> /// 修改某一帧的数据 /// </summary> /// <param name="elapsedFrames">计数帧</param> private void Update(int elapsedFrames) { //修改数据-游戏背景往下移动 GameBackGround.Update(elapsedFrames); //修改数据-修改战机数据 GamePlane.Update(elapsedFrames); //修改数据-修改所有子弹数据 for (int i = ListBullets.Count - 1; i >= 0; i--) { ListBullets[i].Update(elapsedFrames); } //修改数据-修改所有子弹2数据 for (int i = ListBulletsTwo.Count - 1; i >= 0; i--) { ListBulletsTwo[i].Update(elapsedFrames); } //修改数据-修改所有敌机1的数据 for (int i = ListEnemy1.Count - 1; i >= 0; i--) { ListEnemy1[i].Update(elapsedFrames); } //修改数据-修改所有敌机Boss的数据 for (int i = ListEnemy2.Count - 1; i >= 0; i--) { ListEnemy2[i].Update(elapsedFrames); } //修改数据-修改所有敌机2的数据 for (int i = ListEnemyBoss.Count - 1; i >= 0; i--) { ListEnemyBoss[i].Update(elapsedFrames); } //修改数据-修改所有子弹奖励的数据 for (int i = ListBulletTwoPrize.Count - 1; i >= 0; i--) { ListBulletTwoPrize[i].Update(elapsedFrames); } //修改数据-修改所有生命奖励的数据 for (int i = ListLifePrize.Count - 1; i >= 0; i--) { ListLifePrize[i].Update(elapsedFrames); } } private void Time_Game_Tick(object sender, EventArgs e) { //累计帧数 elapsedFrames ; //修改第几帧数据 Update(elapsedFrames); //刷屏重绘 //this.Refresh(); //重绘窗体,只重新绘制变化的部分 this.Invalidate(new Rectangle(0, 0, this.Width, this.Height), true); } } }
好例子网口号:伸出你的我的手 — 分享!
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论