实例介绍
【实例简介】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小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明


网友评论
我要评论