C#游戏《坦克大战》--主程序
今天和女朋友分手,写一段技术博客以平静心态。
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#游戏《坦克大战》--主程序相关推荐
- HTML源码小游戏——坦克大战、飞机大战、捕鱼达人
捕鱼达人小游戏 飞机大战小游戏 坦克大战小游戏 关注公众号"程序员秋田君",回复 坦克大战.飞机大战.捕鱼达人等信息即可获取源码文件. ...
- Python小游戏-坦克大战(tank war)
Python小游戏-坦克大战(tank war) 前言 这款游戏一直都是我很喜欢的游戏,很童年,太经典啦!也很好玩,所以我来做一做这款游戏. 开发工具 python版本:3.7.3 相关模块:pyga ...
- c语言编程简单小游戏坦克大战,坦克大战1990(c语言文件版)游戏
坦克大战1990(c语言文件版)是一款很炫的坦克战争类游戏.游戏设计感很强.敌人千变万化,但是你可别被迷惑哦,将他们通通歼灭吧! 作者的话 经过四五天的奋斗,第一次编的游戏终于完成了,好激动. 首先得 ...
- 小白学习Unity 3D做经典游戏坦克大战日常
老师 | Trigger 学习者 |小白 出品 | Siki 学院 Hello,小伙伴们.接下来小白跟Trigger老师做一款2D游戏坦克大战.从素材.代码到场景和UI的游戏开发.小白把日常遇到的问题 ...
- C++小游戏---坦克大战(一)
刚开始写的时候想想这个应该是非常好写的,但是写到后面,尤其是遇到很多莫名其妙的bug之后,发现似乎没那么简单.以下是开发过程中的一些想法,在这里做个笔记. 目录 游戏介绍 素材引入 初始化 全局初始化 ...
- JAVA大作业——网络在线对战游戏——坦克大战
目录 大作业要求 实机演示 主机环回地址布置连接演示 多人联机对战演示 WASD控制坦克移动和按J键发射炮弹攻击 攻击到敌人后会爆炸并且消灭敌人 按下C键设置IP主机连接 大作业要求 简单的小游戏 要 ...
- 射击类小游戏——坦克大战(java实现)
项目名称:坦克大战 项目背景:坦克大战是一款非常经典的游戏,也是学习面向对象编程的理想实例.现在面向对象的计算机编程语言很多,很多想法都可以通过编程来实现.本文的坦克大战有完整的界面,能够实现人机大战 ...
- 火箭工作室c++小游戏——坦克大战(初始版)
今天第四次写博客,给大家发一个坦克大战的初始版,可以开外挂,要自己去探索 #include<windows.h> #include<conio.h> #include<i ...
- 【flash】 小游戏 坦克大战下载 多个敌人
下载地址: 链接:https://pan.baidu.com/s/120Zu9F2qTnFlScE6YAXllg 提取码:0hrv 3种敌人 一种向前攻击 一种 向前 攻击3个子弹 红色坦克会 向你的 ...
- Java游戏 坦克大战
package javabook; import java.util.Scanner; import java.util.Random; public class Fight { public sta ...
最新文章
- NAND FLASH分区规划
- [2.7]【CF933A】A Twisty Movement【CF926B】Add Points【CF917A】The Monster【CF919E】Congruence Equation
- MySQL extract()函数
- 60、date的使用
- LeetCode 589. N叉树的前序遍历(前序遍历)
- C/C++ OpenCV五种滤波器综合示例
- 【script】python通过字符串调用方法
- WACV 2021 开幕,更偏重技术应用,附论文下载
- Leetcode1025.除数博弈
- NYOJ760-See LCS again,有技巧的暴力!
- 关于Hive数据仓库的那些事儿(一)模式设计
- 【备忘】年薪50万2018年最新北风网大数据Spark2.0从入门到精通视频教程
- oracle卸载界面显示不出来,如果oracle卸载没有正确卸载应该怎么办?
- 五子棋c语言程序人人对战,C语言 AI智能,五子棋 人机对战,人人对战
- 英雄连2一直显示连接relic服务器,英雄连2 联机PleaseWait问题解决详细教程
- JavaScript离别之作——HTML元素操作
- 继电器触点RC吸收电路
- GDT,LDT,GDTR,LDTR 详解
- mysql中utf8和utf8mb4区别,MySQL中utf8和utf8mb4的区别
- 便携式打印机连接蓝牙方式
热门文章
- 概率论在实际生活的例子_概率论在实际生活中应用
- Unity人脸识别(一),基于百度大脑的Unity3dC#简单的人脸对比(搜索)功能,适合小白入门
- 巧用千寻位置GNSS软件|电离层抑制有一套
- 职业院校技能大赛中职组 计算机辅助设计(建筑cad)比赛题目,2016年山东省职业院校技能大赛中职组“计算机辅助设计工业产品CAD”样题.pdf...
- 2021年登高架设考试总结及登高架设模拟试题
- 计算机毕业设计ssm大学生网上书店959u2系统+程序+源码+lw+远程部署
- VS2017制作POV-LED取模软件 可对图片取模
- 如何将TN系统转化为IT系统?医用隔离电源系统为您解决难题
- 回归Qt——写在Qt5.10发布之日
- 关于微赞,微擎,微动力模块安装时出现 版权保护,未在云平台注册 的解决办法