今天和女朋友分手,写一段技术博客以平静心态。

1.统计信息

用于主界面显示各种信息

        //统计public struct t_statistics{public int generateenemyNum;   //生成敌人数量public int destroyenemyNum;    //已经摧毁的敌人数量public int GetcurrenemyNum()   //当前敌人数量{return generateenemyNum - destroyenemyNum;}public int GetremainingenemyNum()  //剩余的{return t_commpar.TANKNUMMAX - destroyenemyNum;}public void init(){generateenemyNum = 0;destroyenemyNum = 0;}public t_statistics(int g ,int d){generateenemyNum = g;destroyenemyNum = d;}}

2.坦克序列

按一定的随机顺序生成各种坦克

        //生成序列,之后按此序列生成坦克void generaterandseq(int[] seq,  int len ){int i = 0;for (i = 0; i< len ;i++ ){seq[i] = (i%4)+1;}for (i = 0; i < len/2; i++){int r = rn.Next(0, 9);if (r != i){mymath.swap(ref seq[i], ref  seq[r]);}}for (i = 0; i < len / 2; i++){int r = rn.Next(0, 9);if (r != i){mymath.swap(ref seq[i + 10], ref  seq[r + 10]);}}}/// <summary>/// 生成敌军坦克/// </summary>/// <param name="startLocation">开始位置</param>void generateEnemyTanks(Point startLocation){tanks.Add(new tank(startLocation, randseq[randseqidx]  ));randseqidx++;if (randseqidx >= t_commpar.TANKNUMMAX) randseqidx = 0;dg_showtankcars += tanks[tanks.Count - 1].showtank;dg_showtankbullets += tanks[tanks.Count - 1].showbullet;tankacts.Add(tanks[tanks.Count - 1].tankact);statistics.generateenemyNum++;label_currenemynum.Text = statistics.GetcurrenemyNum().ToString();}

定义委托方便使用

        //委托internal delegate void _dg_showtank(ref Graphics gr);internal delegate void _dg_tankact( );_dg_showtank dg_showtankcars, dg_showtankbullets;

玩家坦克与保存所有坦克的列表。

3.摧毁坦克

        /// <summary>/// 轮询所有敌军并摧毁需要的/// </summary>void dowaitForDestroyTanks(){//  list注意删除顺序for (int i = tanks.Count - 1; i >= 0; i--){if (tanks[i].aliveCnt > 0){tanks[i].aliveCnt--;if (tanks[i].aliveCnt == 0){destroyDestroyTanks(i);}}}}//摧毁某个敌军void destroyDestroyTanks(int i){statistics.destroyenemyNum++;label_destroyenemynum.Text = statistics.destroyenemyNum.ToString();label_currenemynum.Text = statistics.GetcurrenemyNum().ToString();label_remainingenemynum.Text = statistics.GetremainingenemyNum().ToString();tankacts.RemoveAt(i);dg_showtankbullets -= tanks[i].showbullet;dg_showtankcars -= tanks[i].showtank;tanks.RemoveAt(i);}//显示敌军被摧毁画面void showtankBedestroyed( tank tk ){tk.aliveCnt = t_commpar.TANKALIVECNTMAX;using (Graphics g = Graphics.FromImage(tk.currcarimg)){g.DrawImage(bongimg, new Rectangle(0, 0, t_commpar.TANKSIZEX, t_commpar.TANKSIZEY));}}

4.主流程

游戏需要使用键盘进行操作,单独使用窗体的键盘事件是无法进行坦克的流畅操作。所有需要window API进行键盘状态读取。

        [DllImport("user32.dll", EntryPoint="GetKeyState")]public static extern int GetKeyState(int nVirKey);bool iskeySPACEPress(){return ((GetKeyState((int)(Keys.Space)) & 0x8000) != 0  );}bool iskeyUPPress(){return ((GetKeyState((int)(Keys.Up)) & 0x8000) != 0);}bool iskeyRIGHTPress(){return ((GetKeyState((int)(Keys.Right)) & 0x8000) != 0);}bool iskeyLEFTPress(){return ((GetKeyState((int)(Keys.Left)) & 0x8000) != 0);}

在定时读取键盘状态,操作坦克。

        //主流程15MS/perprivate void maintimer_Tick(object sender, EventArgs e){updatatanksinfolist();playertank.tankact();for (int j = 0; j < tanks.Count; j++){tankacts[j]( ); }map.mainimg = mainimg;pbx_main.BackgroundImage = (Bitmap)mainimg.Clone();gr = Graphics.FromImage(pbx_main.BackgroundImage);int n = tanks.Count;for (var i = 0; i <n ; i++){if ( tanks[i].bingo == 1)//检测敌军是否打击中玩家{tanks[i].bingo = 0;playertank.Hp -= tanks[i].Atk;if (ckb_shitmusic.Checked)(new SoundPlayer(global::tank.Properties.Resources.playerbeAttact)).Play();if (playertank.Hp > 0){showplayerBeAttacted();}else { //ENDshowplayerBeAttacted();playertank.isalive = false;}}if ( tanks[i].isalive )if ( playertank.bingo == tanks[i].uuid)//检测玩家是否打击中敌军{playertank.bingo = 0;tanks[i].Hp -= playertank.Atk;//每次重新加载避免音频丢失if( ckb_shitmusic.Checked)(new SoundPlayer(global::tank.Properties.Resources.tankbeattact)).Play();if (tanks[i].Hp > 0){ showtankinjured(i);}else{tanks[i].isalive = false;showtankinjured(i);showtankBedestroyed(tanks[i]);}}}dg_showtankbullets(ref gr);dg_showtankcars(ref gr);}

5.效果

1.

坦克大战A

2.

坦克大战B

3.

坦克大战C

4.

坦克大战D

心情很差,胡乱放些游戏效果。

C#游戏《坦克大战》--主程序相关推荐

  1. HTML源码小游戏——坦克大战、飞机大战、捕鱼达人

    捕鱼达人小游戏 飞机大战小游戏 坦克大战小游戏        关注公众号"程序员秋田君",回复 坦克大战.飞机大战.捕鱼达人等信息即可获取源码文件.                 ...

  2. Python小游戏-坦克大战(tank war)

    Python小游戏-坦克大战(tank war) 前言 这款游戏一直都是我很喜欢的游戏,很童年,太经典啦!也很好玩,所以我来做一做这款游戏. 开发工具 python版本:3.7.3 相关模块:pyga ...

  3. c语言编程简单小游戏坦克大战,坦克大战1990(c语言文件版)游戏

    坦克大战1990(c语言文件版)是一款很炫的坦克战争类游戏.游戏设计感很强.敌人千变万化,但是你可别被迷惑哦,将他们通通歼灭吧! 作者的话 经过四五天的奋斗,第一次编的游戏终于完成了,好激动. 首先得 ...

  4. 小白学习Unity 3D做经典游戏坦克大战日常

    老师 | Trigger 学习者 |小白 出品 | Siki 学院 Hello,小伙伴们.接下来小白跟Trigger老师做一款2D游戏坦克大战.从素材.代码到场景和UI的游戏开发.小白把日常遇到的问题 ...

  5. C++小游戏---坦克大战(一)

    刚开始写的时候想想这个应该是非常好写的,但是写到后面,尤其是遇到很多莫名其妙的bug之后,发现似乎没那么简单.以下是开发过程中的一些想法,在这里做个笔记. 目录 游戏介绍 素材引入 初始化 全局初始化 ...

  6. JAVA大作业——网络在线对战游戏——坦克大战

    目录 大作业要求 实机演示 主机环回地址布置连接演示 多人联机对战演示 WASD控制坦克移动和按J键发射炮弹攻击 攻击到敌人后会爆炸并且消灭敌人 按下C键设置IP主机连接 大作业要求 简单的小游戏 要 ...

  7. 射击类小游戏——坦克大战(java实现)

    项目名称:坦克大战 项目背景:坦克大战是一款非常经典的游戏,也是学习面向对象编程的理想实例.现在面向对象的计算机编程语言很多,很多想法都可以通过编程来实现.本文的坦克大战有完整的界面,能够实现人机大战 ...

  8. 火箭工作室c++小游戏——坦克大战(初始版)

    今天第四次写博客,给大家发一个坦克大战的初始版,可以开外挂,要自己去探索 #include<windows.h> #include<conio.h> #include<i ...

  9. 【flash】 小游戏 坦克大战下载 多个敌人

    下载地址: 链接:https://pan.baidu.com/s/120Zu9F2qTnFlScE6YAXllg 提取码:0hrv 3种敌人 一种向前攻击 一种 向前 攻击3个子弹 红色坦克会 向你的 ...

  10. Java游戏 坦克大战

    package javabook; import java.util.Scanner; import java.util.Random; public class Fight { public sta ...

最新文章

  1. NAND FLASH分区规划
  2. [2.7]【CF933A】A Twisty Movement【CF926B】Add Points【CF917A】The Monster【CF919E】Congruence Equation
  3. MySQL extract()函数
  4. 60、date的使用
  5. LeetCode 589. N叉树的前序遍历(前序遍历)
  6. C/C++ OpenCV五种滤波器综合示例
  7. 【script】python通过字符串调用方法
  8. WACV 2021 开幕,更偏重技术应用,附论文下载
  9. Leetcode1025.除数博弈
  10. NYOJ760-See LCS again,有技巧的暴力!
  11. 关于Hive数据仓库的那些事儿(一)模式设计
  12. 【备忘】年薪50万2018年最新北风网大数据Spark2.0从入门到精通视频教程
  13. oracle卸载界面显示不出来,如果oracle卸载没有正确卸载应该怎么办?
  14. 五子棋c语言程序人人对战,C语言 AI智能,五子棋 人机对战,人人对战
  15. 英雄连2一直显示连接relic服务器,英雄连2 联机PleaseWait问题解决详细教程
  16. JavaScript离别之作——HTML元素操作
  17. 继电器触点RC吸收电路
  18. GDT,LDT,GDTR,LDTR 详解
  19. mysql中utf8和utf8mb4区别,MySQL中utf8和utf8mb4的区别
  20. 便携式打印机连接蓝牙方式

热门文章

  1. 概率论在实际生活的例子_概率论在实际生活中应用
  2. Unity人脸识别(一),基于百度大脑的Unity3dC#简单的人脸对比(搜索)功能,适合小白入门
  3. 巧用千寻位置GNSS软件|电离层抑制有一套
  4. 职业院校技能大赛中职组 计算机辅助设计(建筑cad)比赛题目,2016年山东省职业院校技能大赛中职组“计算机辅助设计工业产品CAD”样题.pdf...
  5. 2021年登高架设考试总结及登高架设模拟试题
  6. 计算机毕业设计ssm大学生网上书店959u2系统+程序+源码+lw+远程部署
  7. VS2017制作POV-LED取模软件 可对图片取模
  8. 如何将TN系统转化为IT系统?医用隔离电源系统为您解决难题
  9. 回归Qt——写在Qt5.10发布之日
  10. 关于微赞,微擎,微动力模块安装时出现 版权保护,未在云平台注册 的解决办法