基本信息
源码名称:C# 坦克大战 小游戏源码
源码大小:4.52M
文件格式:.zip
开发语言:C#
更新时间:2019-12-17
友情提示:(无需注册或充值,赞助后即可获取资源下载链接)
嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300
本次赞助数额为: 2 元×
微信扫码支付:2 元
×
请留下您的邮箱,我们将在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) { } } }