基本信息
源码名称:C# 坦克大战 小游戏源码
源码大小:4.52M
文件格式:.zip
开发语言:C#
更新时间:2019-12-17
   友情提示:(无需注册或充值,赞助后即可获取资源下载链接)

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

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


using System;
using System.Collections;
using System.Drawing;
using System.Windows.Forms;
using Tank;
using System.Data.SqlClient;
//add

namespace 坦克
{
    public partial class Form1 : Form
    {
        //private Tank []eTanks=new Tank[11];
        private readonly int[,] Map = new int[10,10]; //砖块地图
        private readonly Tank MyTank = new Tank(6);
        private readonly ArrayList eTanks = new ArrayList();
        private int Score; //计分
        public int[,] TMap = new int[10,10]; //含坦克,砖的地图
        private int eCount; //敌方坦克数量
        private int eMaxCount = 10; //eMaxCount敌方坦克最大量
        private Tank eTank;
        private string path; //应用程序路径
        private int width = 32;

        public Form1()
        {
            InitializeComponent();
            label2.Text = User.mintime;
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            
            pictureBox1.Width = 10*width;
            pictureBox1.Height = 10*width;
            path = Application.StartupPath;
            Random r = new Random();
            for (int x = 0; x < 10; x  = 2)
                for (int y = 0; y < 10; y  = 2)
                {
                    //产生0,1数其中0代表空地,1代表墙砖  
                    Map[x, y] = r.Next(0, 2);
                }
            Map[4, 9] = 0;
            MyTank.Top = 9;
            MyTank.Left = 4;
            MyTank.Direct = 0;
            lblX.Text = "X坐标:"   MyTank.Left   "  Y坐标:"   MyTank.Top;
        }

        private void DragWall(Graphics g) //画游戏地图
        {
            Image WallImage = Image.FromFile("BMP/TQ.BMP");
            for (int x = 0; x < 10; x  )
                for (int y = 0; y < 10; y  )
                {
                    if (Map[x, y] == 1)
                    {
                        //得到绘制这个墙砖块的在游戏面板中的矩形区域
                        Rectangle Rect = new Rectangle(x*width, y*width, width, width);
                        g.DrawImage(WallImage, Rect);
                    }
                }
        }

        private void Form1_KeyDown(object sender, KeyEventArgs e)
        {
            switch (e.KeyCode)
            {
                case Keys.Up: //上 
                    if (MyTank.Top == 0 || Map[MyTank.Left, MyTank.Top - 1] == 1
                        || Meet_Tank(MyTank.Left, MyTank.Top - 1)) //遇到墙砖或坦克
                        ; //不动
                    else if (MyTank.Direct == 0) MyTank.Top--;
                    MyTank.Direct = 0;
                    break;
                case Keys.Down: //下 
                    if (MyTank.Top == 9 || Map[MyTank.Left, MyTank.Top   1] == 1
                        || Meet_Tank(MyTank.Left, MyTank.Top   1)) //遇到墙砖或坦克
                        ; //不动
                    else if (MyTank.Direct == 1) MyTank.Top  ;
                    MyTank.Direct = 1;
                    break;

                case Keys.Left: //左 
                    if (MyTank.Left == 0 || Map[MyTank.Left - 1, MyTank.Top] == 1
                        || Meet_Tank(MyTank.Left - 1, MyTank.Top)) //遇到墙砖或坦克
                        ; //不动
                    else if (MyTank.Direct == 2) MyTank.Left--;
                    MyTank.Direct = 2;
                    break;
                case Keys.Right: //右 
                    if (MyTank.Left == 9 || Map[MyTank.Left   1, MyTank.Top] == 1
                        || Meet_Tank(MyTank.Left   1, MyTank.Top)) //遇到墙砖或坦克
                        ; //不动
                    else if (MyTank.Direct == 3) MyTank.Left  ;
                    MyTank.Direct = 3;
                    break;
                case Keys.Space: //空格发射子弹
                    MyTank.fire();
                    break;
            }
            pictureBox1.Invalidate(); //重画游戏面板区域
            lblX.Text = "X坐标:"   MyTank.Left   "  Y坐标:"   MyTank.Top;
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            foreach (Tank t in eTanks)
            {
                switch (t.Direct) //0--上,1--下,2--左,3--右
                {
                    case 0: //向上
                        if (t.Top == 0 || Map[t.Left, t.Top - 1] == 1
                            || Meet_Tank(t.Left, t.Top - 1)) //遇到墙砖或坦克
                            t.newDirect(); //坦克转向
                        else
                            t.Top--;
                        break;
                    case 1: //向下
                        if (t.Top == 9 || Map[t.Left, t.Top   1] == 1
                            || Meet_Tank(t.Left, t.Top   1)) //遇到墙砖或坦克
                            t.newDirect(); //坦克转向
                        else
                            t.Top  ;
                        break;
                    case 2: //向左
                        if (t.Left == 0 || Map[t.Left - 1, t.Top] == 1
                            || Meet_Tank(t.Left - 1, t.Top)) //遇到墙砖或坦克
                            t.newDirect(); //坦克转向
                        else
                            t.Left--;
                        break;
                    case 3: //向右
                        if (t.Left == 9 || Map[t.Left   1, t.Top] == 1
                            || Meet_Tank(t.Left   1, t.Top)) //遇到墙砖或坦克
                            t.newDirect(); //坦克转向
                        else
                            t.Left  ;
                        break;
                }
                Random r = new Random();
                int fire_bool = r.Next(0, 8); //产生0—7的数
                if (fire_bool == t.Direct) t.fire();
            }
            pictureBox1.Invalidate(); //重画游戏面板区域            
        }

        private bool Meet_Tank(int left, int top) //比较坦克位置
        {
            foreach (Tank t in eTanks) //遍历地方
            {
                if (left == t.Left && top == t.Top) //遇到坦克
                    return true;
            }
            if (left == MyTank.Left && top == MyTank.Top) //遇到游戏方坦克
                return true;
            return false;
        }

        private void pictureBox1_Paint(object sender, PaintEventArgs e)
        {
            //修改含坦克信息的地图
            for (int x = 0; x < 10; x  )
                for (int y = 0; y < 10; y  )
                {
                    if (Map[x, y] == 1) TMap[x, y] = 1; //砖块
                    else TMap[x, y] = 0; //0空地
                }
            for (int i = 0; i < eTanks.Count; i  )
                if (eTanks[i] != null)
                {
                    int x = ((Tank) eTanks[i]).Left;
                    int y = ((Tank) eTanks[i]).Top;
                    TMap[x, y] = ((Tank) eTanks[i]).Type; //此处为敌方坦克
                }
            TMap[MyTank.Left, MyTank.Top] = MyTank.Type; //此处为己方坦克(6)

            //*******************重画游戏界面
            DragWall(e.Graphics); //画墙砖
            for (int i = 0; i < eTanks.Count; i  ) //画敌方坦克及子弹
                if (eTanks[i] != null)
                {
                    Tank t = (Tank) eTanks[i];
                    t.Draw(e.Graphics, t.Type);
                    t.DrawBullet(e.Graphics, TMap);
                }
            MyTank.Draw(e.Graphics, MyTank.Type); //画己方坦克Type=6
            MyTank.DrawBullet(e.Graphics, TMap); //画己方子弹
            //处理爆破
            for (int i = 0; i < eTanks.Count; i  ) //画敌方坦克爆破
                if (eTanks[i] != null)
                {
                    Tank t = (Tank) eTanks[i];
                    if (TMap[t.Left, t.Top] == -1)
                    {
                        t.Explore(e.Graphics);
                        eTanks.RemoveAt(i);
                        i--; //注意此处                        
                        TMap[t.Left, t.Top] = 0;
                        lblX.Text = "("   t.Left   ","   t.Top   ")坦克被击中";
                        Score  = 100;
                        //PlaySound.Play("Sound/Score.WAV"); 
                        lblScore.Text = Score.ToString();
                    }
                }
            if (TMap[MyTank.Left, MyTank.Top] == -1) //画己方坦克爆破
            {   
                MyTank.Explore(e.Graphics);
                TMap[MyTank.Left, MyTank.Top] = 0;
                lblX.Text = "游戏者你被击中,游戏结束";
                timer1.Enabled = false; //游戏结束
            }
            CheckWin(); //检查是否胜利
        }

        private void CheckWin() //检查是否胜利
        {
            if (eTanks.Count == 0 && eCount == eMaxCount) //胜利
            {
                lblX.Text = " 过关! , 恭喜";
                PlaySound.Play("Sound/WIN.WAV"); //过关后播放相应音乐

                timer1.Enabled = false;
               String  time = label1.Text;
                timer3.Enabled = false;
                string strconn = "Server=.;Database=tank;user id=sa;pwd=123";
                SqlConnection sqlconn = new SqlConnection(strconn);
                try
                {
                    sqlconn.Open();
                    //MessageBox.Show("连接数据库成功");
                    string sqladd = "update  user2  set time = '" time "' where username = '"   User.username "'";
                    SqlCommand sqlcmd = new SqlCommand(sqladd, sqlconn);
                    sqlcmd.ExecuteNonQuery();
                   
                  
                }
                catch (Exception ex)
                {
                    MessageBox.Show("数据库打开失败,详细信息:"   ex.ToString());
                }
                finally
                {
                    sqlconn.Close();
                }
            }
        }

        private void timer2_Tick(object sender, EventArgs e) //定时产生新敌方坦克
        {
            if (eCount < eMaxCount) //eMaxCount敌方坦克最大量
            {
                //敌方坦克类型为3,改变此数可以产生不同图案的地方坦克
                eTank = new Tank(3);
                eTanks.Add(eTank); // eTanks[eCount] = eTank;
                eCount  ;
            }
            else
                timer2.Enabled = false; //不再产生新的敌方坦克
        }

        private void Form1_Activated(object sender, EventArgs e)
        {
            
        }

        private void label1_Click(object sender, EventArgs e)
        {

        }
         public int t = 0;
        string hh, mm, ss, ms;
        public string outformat(int t)//自定义类用来提供给我们自己想要的字符串格式,以及时间的代还运算
        {
            
            int temp = t / 100;
            int mms = t % 100;
            int h = temp/ 3600;
            int m = temp / 60 % 60;
            int s = temp % 60;

            if (h < 10) hh = "0"   h.ToString(); else hh=h.ToString();
            if (m < 10) mm = "0"   m.ToString(); else mm = m.ToString();
            if (s < 10) ss = "0"   s.ToString(); else ss = s.ToString();
            if (mms < 10) ms = "0"   mms.ToString(); else ms = mms.ToString();

            return hh   ":"   mm   ":"   ss   "."   ms;
        }
        private void timer3_Tick(object sender, EventArgs e)
        {
            t  ;

            label1.Text = outformat(t);
        }

        private void label2_Click(object sender, EventArgs e)
        {

        }

        private void label3_Click(object sender, EventArgs e)
        {

        }
    }
}