基本信息
源码名称:winform打飞机小游戏
源码大小:0.56M
文件格式:.zip
开发语言:C#
更新时间:2018-05-08
   友情提示:(无需注册或充值,赞助后即可获取资源下载链接)

     嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):78630559

本次赞助数额为: 5 元 
   源码介绍




using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;

namespace DragonQuest
{
    public partial class FrmMain : Form
    {
        public const int GAMEWIDTH = 600;//游戏窗口的宽度
        public const int GAMEHEIGHT = 700;//游戏窗口的高度
        private bool isFailed = false;
        private bool isWon = false;

        public static Bitmap backgroundImg = new Bitmap(Application.StartupPath   "\\images\\background.png");

        //游戏是否开始
        private bool isStart = false;
        private EnemyBoss eBoss = new EnemyBoss(-90, 200, 6, 6, 200, false, true, true);

        //背景滚动的参数
        private int roll = 0;

        //双缓冲用到的变量
        private Bitmap bufferImg = null;
        private Graphics gImg = null;

        Thread pt = null;

        public static Random enemyRandom = new Random();

        int pkBoss = 0;


        public FrmMain()
        {
            InitializeComponent();
            LauchForm();
        }

        /// <summary>
        ///  当运行窗体的时候要用的代码
        /// </summary>
        private void LauchForm()
        {
            this.Width = GAMEWIDTH;//设置窗口的宽度
            this.Height = GAMEHEIGHT;//设置窗口的高度

            //设置显示图元控件的几个属性: 必须要设置,否则画面会闪烁
            this.SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.ResizeRedraw | ControlStyles.AllPaintingInWmPaint, true);

            //创建一张位图,以后就在位图上作画,然后贴到窗口上,达到双缓冲
            bufferImg = new Bitmap(GAMEWIDTH, GAMEHEIGHT);
            //指定的 Image 返回一个新的 Graphics。
            gImg = Graphics.FromImage(bufferImg);

            isStart = true;
        }

        private void PaintThread()
        {
            //当游戏开始的时候,就开始刷新屏幕
            while (isStart)
            {
                //画背景图片
                DrawBackground(gImg);

                GetEnemys();

                HitCheck.GetInstance().DoHitCheck();
                if ((isFailed==false)&&(HitCheck.GetInstance().MyHero.blb.NowLife <= 0))
                {

                    MessageBox.Show("很遗憾,你输了!");
                    isFailed = true;
                    
                }
                if ((isWon == false) && (eBoss.blb.NowLife <= 0))
                {
                    MessageBox.Show("恭喜你,你赢了!");
                    isWon = true;
                }

                HitCheck.GetInstance().Draw(gImg);

                this.Invalidate();

                Thread.Sleep(50);
            }
        }

        private void GetEnemys()
        {
            if (pkBoss == -1)
            {
                return;
            }

            if (pkBoss < 10)
            {
                if (enemyRandom.Next(0, 200) < 5)
                {
                    HitCheck.GetInstance().AddElement(new EnemyOne(enemyRandom.Next(-90, 500), -50, 10, 10, 10, false, enemyRandom.Next(0, 2) == 0 ? true : false));
                    pkBoss  ;
                }

                if (enemyRandom.Next(0, 200) < 5)
                {
                    HitCheck.GetInstance().AddElement(new EnemyTwo(-50, enemyRandom.Next(100, 450), 5, 5, 10, false, enemyRandom.Next(0, 2) == 0 ? true : false));
                    pkBoss  ;
                }

                if (enemyRandom.Next(0, 200) < 2)
                {
                    HitCheck.GetInstance().AddElement(new EnemyThree(enemyRandom.Next(10, 540), 800, 5, 5, 10, false));
                    pkBoss  ;
                }
            }
            else
            {
                
                HitCheck.GetInstance().AddElement(eBoss);
                pkBoss = -1;
            }
        }

        /// <summary>
        /// 画游戏背景
        /// </summary>
        /// <param name="g"></param>
        private void DrawBackground(Graphics g)
        {
            g.DrawImage(backgroundImg, 0, roll - GAMEHEIGHT, 600, 700);
            g.DrawImage(backgroundImg, 0, roll, 600, 700);

            roll  = 3;
            if (roll >= 700) roll = 0;
        }

        private void FrmMain_Load(object sender, EventArgs e)
        {
            Console.WriteLine("Hello!");
            Console.Read();
            HitCheck.GetInstance().AddElement(new Hero(300, 500, 10, 10, 100, true));

            //窗体加载后,启动线程,刷新界面
            pt = new Thread(new ThreadStart(PaintThread));
            pt.Start();
        }

        private void FrmMain_Paint(object sender, PaintEventArgs e)
        {
            e.Graphics.DrawImage(bufferImg, 0, 0);//把画布贴到画面上
        }

        /// <summary>
        /// 清理资源
        /// </summary>
        private void DisResource()
        {
            isStart = false;
            //等待线程结束
            pt.Join();

            bufferImg.Dispose();
            gImg.Dispose();
            backgroundImg.Dispose();
        }

        private void FrmMain_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (MessageBox.Show("真的要退出游戏吗?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No)
            {
                e.Cancel = true;
            }
            else
            {
                DisResource();
            }
        }

        private void FrmMain_KeyDown(object sender, KeyEventArgs e)
        {
            HitCheck.GetInstance().MyHero.KeyDown(e);
        }

        private void FrmMain_KeyUp(object sender, KeyEventArgs e)
        {
            HitCheck.GetInstance().MyHero.KeyUp(e);
        }
    }
}