⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tankgame2008.cs

📁 基于.net FrameWork的windows游戏-坦克大战游戏.用到了多线程,绘图,碰撞处理等技术,整个游戏的框架已经搭建起来,可以做二次开发.
💻 CS
字号:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Media;

namespace TankGame2008
{
    public partial class TankGame2008 : Form
    {
        public TankGame2008()
        {

            InitializeComponent();
            
        }

        const int EnemyNum = 4;
        int myTankWidth, myTankHeight;
        int enemyTankWidth, enemyTankHeight;
        int myTankX, myTankY;
        int enemyTankX, enemyTankY;
        int destroyEnemyNum = 0;
        public int destroyEnemyNumber
        {
            get
            {
                return destroyEnemyNum;
            }
            set
            {
                destroyEnemyNum = value;
            }
        }
        Image myTankSrcImg;
        Image enemyTankSrcImg;
        Image shellSrcImg;
        Image[] myTankImg;
        Image[] enemyTankImg;
        PlayerTankSprite myTankSprite;
        EnemyTankSprite[] enemyTank;
        TankThread threadTank;
        ShellSprite MyShell;
        public ShellSprite myShell
        {
            get { return MyShell; }
        }
        ShellSprite[] enemyShell;
        public ShellSprite[] EnemyShell
        {
            get { return enemyShell; }
        }
        Image[] ShellImg;
        Explosion explosion;
        Image[] explosionImg;
        Image explosionSrcImg;
        Image bufferImage;
        Graphics bufferGraphics;
        Random rand;

        Image back;

        private void TankGame2008_Load(object sender, EventArgs e)
        {
            myTankImg = new Image[4];
            enemyTankImg = new Image[4];
            ShellImg = new Image[2];
            explosionSrcImg = Image.FromFile(@"..\..\pic\explosion.gif");
            myTankSrcImg = Image.FromFile(@"..\..\pic\PlayerTank\myTankSrcImg.png");
            enemyTankSrcImg = Image.FromFile(@"..\..\pic\enemyTank\enemyTankSrcImg.png");
            shellSrcImg = Image.FromFile(@"..\..\pic\shellSrcImg.png");
            explosionImg = getClipImage.getImages(explosionSrcImg, 1, 8);
            myTankImg = getClipImage.getImages(myTankSrcImg, 1, 4);
            enemyTankImg = getClipImage.getImages(enemyTankSrcImg, 1, 4);
            ShellImg = getClipImage.getImages(shellSrcImg, 1, 1);

            myTankWidth = myTankSrcImg.Width / 4;
            myTankHeight = myTankSrcImg.Height;
            enemyTankWidth = enemyTankSrcImg.Width / 4;
            enemyTankHeight = enemyTankSrcImg.Height;
            myTankX = (this.Width - myTankWidth) / 2;
            myTankY = this.Height - myTankHeight;
            //缓冲
            SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint, true);

            bufferImage = new Bitmap(this.Width, this.Height);
            bufferGraphics = Graphics.FromImage(bufferImage);
            bool focus = this.Focus();
            rand = new Random();

            MyShell = new ShellSprite(ShellImg[0], 0, 10, this);
            MyShell.setWidthHeight(ShellImg[0].Width, ShellImg[0].Height);
            explosion = new Explosion(explosionImg, this);
            myTankSprite = new PlayerTankSprite(myTankImg, myTankX, myTankY, this);
            myTankSprite.setWidthHeight(myTankWidth, myTankHeight);
            enemyTank = new EnemyTankSprite[EnemyNum];
            enemyShell = new ShellSprite[EnemyNum];
            createNewEnemyTank();
            this.start();

            back = Image.FromFile(@"..\..\pic\Bckscrn.png");
        }

        public void start()
        {
            threadTank = new TankThread(this, myTankSprite, enemyTank, MyShell, enemyShell, explosion);
            threadTank.startRuning();
        }

        public void stop()
        {
            threadTank = null;
        }

        public void createNewEnemyTank()
        {
            for (int i = 0; i < EnemyNum; i++)
            {
                enemyTankX = i * 100;
                enemyTankY = 0;

                enemyShell[i] = new ShellSprite(ShellImg[0], 0, 4, this);
                enemyShell[i].setWidthHeight(shellSrcImg.Width, shellSrcImg.Height);

                enemyTank[i] = new EnemyTankSprite(enemyTankImg, enemyTankX, enemyTankY, this);
                enemyTank[i].setTankDirection(rand.Next(4));
                enemyTank[i].setVisible(true);
                enemyTank[i].setActive(true);
            }
        }

        public void recreateEnemyTank()
        {
            if (destroyEnemyNum == EnemyNum)
            {
                destroyEnemyNum = 0;
                createNewEnemyTank();
            }
        }

        private void TankGame2008_Paint(object sender, PaintEventArgs e)
        {

            bufferGraphics.DrawImage(back, new Point(0, 0));
            recreateEnemyTank();
            for (int i = 0; i < EnemyNum; i++)
            {
                if (enemyTank[i].getVisible() == true)
                {
                    enemyTank[i].setWidthHeight(enemyTankWidth, enemyTankHeight);
                    enemyTank[i].drawSprite(bufferGraphics, enemyTank[i].getTankDirection());
                    enemyShell[i].drawSprite(bufferGraphics);
                    int k = rand.Next(10000);
                    if (k % 2 != 0 && k < 30)
                    {
                        enemyTank[i].setTankDirection(rand.Next(12) % 4);
                    }
                }
            }
            myTankSprite.drawSprite(bufferGraphics, myTankSprite.getTankDirection());
            MyShell.drawSprite(bufferGraphics);
            explosion.drawSprite(bufferGraphics);
            e.Graphics.DrawImage(bufferImage, 0F, 0F);

        }

        private void TankGame2008_KeyDown(object sender, KeyEventArgs e)
        {
            myTankSprite.keyDown(e.KeyValue);
            
        }

        private void TankGame2008_KeyUp(object sender, KeyEventArgs e)
        {
            myTankSprite.keyReleased();
        }

        public void update(Graphics g)
        {
            TankGame2008_Paint(null, null);
        }
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -