C#實現坦克大戰遊戲
阿新 • • 發佈:2020-07-09
本文例項為大家分享了C#實現坦克大戰遊戲的具體程式碼,供大家參考,具體內容如下
前言
該程式主要對原始的坦克大戰遊戲進行了簡單的還原。目前程式可以做到自動生成敵方坦克且敵方能夠隨機發射子彈,我方坦克也能做到邊發射子彈邊移動。唯一的不足之處就是還沒有完整通關的設定以及障礙的設定。
介面效果圖
圖1
部分程式碼
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.Runtime.InteropServices; namespace MyTankWar { public partial class FormMain : Form { //game state private GameState _gameState = GameState.Close; //my tank private Tank _myTank = new Tank(Side.Me); //list set of enemy's tank private List<Tank> _listEnemyTank = new List<Tank>(); //list set of bullets private List<Bullet> _listBullet = new List<Bullet>(); // import dynamic link library [DllImport("user32.dll",CharSet = CharSet.Auto,ExactSpelling = true,CallingConvention = CallingConvention.Winapi)] public static extern short GetAsyncKeyState(int keyCode); public FormMain() { InitializeComponent(); } //'begin game' button function private void BeginToolStripMenuItem_Click(object sender,EventArgs e) { _gameState = GameState.Open; //enable timer timer1.Enabled = true; timer2.Enabled = true; timer3.Enabled = true; timer4.Enabled = true; } //'end game' button function private void EndToolStripMenuItem_Click(object sender,EventArgs e) { _gameState = GameState.Close; //unenable timer timer1.Enabled = false; timer2.Enabled = false; timer3.Enabled = false; timer4.Enabled = false; } //'pictureBox1'-> Paint function private void pictureBox1_Paint(object sender,PaintEventArgs e) { //draw my tanks _myTank.DrawMe(e.Graphics); //draw enemy's tanks for (int i = 0; i <= _listEnemyTank.Count - 1; i++) _listEnemyTank[i].DrawMe(e.Graphics); //draw each bullet foreach (Bullet myBullet in _listBullet) { myBullet.DrawMe(e.Graphics); } } //'FormMain'-> KeyDown function private void FormMain_KeyDown(object sender,KeyEventArgs e) { //if game started if (_gameState == GameState.Open) { //if press 'Space' key,my tank start shooting if (e.KeyCode == Keys.Space) { Bullet myBullet = _myTank.Fire(); _listBullet.Add(myBullet); } //refresh interface pictureBox1.Invalidate(); } } //timer1' Tick function,used for generating a enemy's tank private void timer1_Tick(object sender,EventArgs e) { //if game started if (_gameState == GameState.Open) { //generate a enemy's tank Tank enemyTank = new Tank(Side.Enemy); //add enenmy's tank _listEnemyTank.Add(enemyTank); //refresh pictureBox1 pictureBox1.Invalidate(); } } //timer2' Tick function,used for controlling the direction of a enemy's tank private void timer2_Tick(object sender,EventArgs e) { // if game started if (_gameState == GameState.Open) { //define a random object Random myRand = new Random(DateTime.Now.Second); for (int i = 0; i <= _listEnemyTank.Count - 1; i++) { //generate a random number int newDirection = myRand.Next(1,10); //move the tank if (newDirection <= 4) _listEnemyTank[i].Move((Direction)newDirection); else _listEnemyTank[i].Move(_listEnemyTank[i]._Direction); } //make bullet move foreach (Bullet Bullet in _listBullet) Bullet.Move(); //refresh pictureBox1 pictureBox1.Invalidate(); } } //timer3' Tick function,used for shooting of a enemy's tank private void timer3_Tick(object sender,EventArgs e) { // if game started if (_gameState == GameState.Open) { //define a random class Random myRand = new Random(DateTime.Now.Second); //make bullet move foreach (Tank enemyTank in _listEnemyTank) { //generate a random number whose value is between 1 to 4 int fireFlag = myRand.Next(1,10); //if enemy's tank can shoot if (fireFlag <= 4) { Bullet enemyBullet = enemyTank.Fire(); _listBullet.Add(enemyBullet); } } } } //timer4' Tick function,used for spying the key pressing state to make my tank move while shooting private void timer4_Tick(object sender,EventArgs e) { if (_gameState == GameState.Open) { bool keyDown = (((ushort)GetAsyncKeyState((int)Keys.Down)) & 0xffff) != 0; if (keyDown == true) _myTank.Move(Direction.Down); bool keyUp = (((ushort)GetAsyncKeyState((int)Keys.Up)) & 0xffff) != 0; if (keyUp == true) _myTank.Move(Direction.Up); bool keyLeft = (((ushort)GetAsyncKeyState((int)Keys.Left)) & 0xffff) != 0; if (keyLeft == true) _myTank.Move(Direction.Left); bool keyRight = (((ushort)GetAsyncKeyState((int)Keys.Right)) & 0xffff) != 0; if (keyRight == true) _myTank.Move(Direction.Right); //refresh pictureBox1 pictureBox1.Invalidate(); } } } }
下載:完整檔案
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。