文章目录

  • 前言
  • 运行效果
  • 窗口控件设计
  • 游戏控制部分
  • 部分关键代码说明
  • 项目源码与视频
  • 游戏bug、不足之处
  • 编程之外

前言

这是上上…上学期自己 《C#程序设计》 的一个期末课程设计,模拟经典游戏《坦克大战》做的一个小游戏,此时让我想起了小时候和小伙伴们插着游戏卡,手柄连着电视机熬夜玩游戏的场景,哎~~我也是个魂斗罗和影子传说都通了全关的人(~ ̄▽ ̄)~ ,我爸妈应该不会看到这篇博客,我担心他们看到了突然想起在我小时候为什么三天两头就要修电视机,还换了几台,哈哈哈…。电脑准备换系统了,这些数据不想保留了,但当初这个小小的课程设计也是花了自己很大功夫的一个心血,就想在换系统前发出来,也许某一天自己还会看一下…


运行效果


窗口控件设计


游戏控制部分

通过键盘在小写状态下“w”,“s”,“a”,“d”,分别控制己方坦克(黄色)向“上”,“下”,“左”,“右”方向运动,空格键发射子弹。
控制处理方法:

public void KeyPress(char key){FSky.Audio.Play("audio\\score.wav");       //插入音乐(每按一次键盘播放一次音乐)if (key == 'w'){animalList[0].image = "gif\\tk_s.gif";animalList[0].directionX = 0;animalList[0].directionY = -3;}if (key == 's'){animalList[0].image = "gif\\tk_x.gif";animalList[0].directionX = 0;animalList[0].directionY = 3;}if (key == 'a') //向左{animalList[0].image = "gif\\tk_z.gif";animalList[0].directionX = -3;animalList[0].directionY = 0;}if (key == 'd'){animalList[0].image = "gif\\tk_y.gif";animalList[0].directionX = 3;animalList[0].directionY = 0;}if (key == ' ')                                     //子弹{Animal animal = new Animal();animal.x = animalList[0].x;                     //位置animal.y = animalList[0].y;animal.directionX = animalList[0].directionX;   //方向animal.directionY = animalList[0].directionY;//animal.image = "gif\\missile1.gif";animal.InitializeByType(1);animal.velocity = animalList[0].velocity * 2+1;   //速度animalList.Add(animal);}}

部分关键代码说明

  1. 这个项目的所有物体包括子弹、坦克、墙壁等,都是通过animalList这个列表在world世界中实例化,并通过Show函数将其显示在bmp这个位图上的。

  1. 由于墙壁的数量比较多,墙壁的位置坐标都不同,我定义了两个一维数组arrx,arry分别存放墙壁的x和y坐标,再使用两个for循环,调用两个数组中存放的坐标,在world中实例化所有红色砖墙和白色铁墙。
int[] arrx = { 300, 347, 256,……397, 397, 480, 530, 70, 450, 30, 100, 570 };
int[] arry = { 343, 343, 343,…… 343, 391, 250, 391, 70, 70, 180, 300, 250 };
//------------墙壁-------------------------------------------for (int i = 0; i < 19; i++)     //控制生成墙壁的数量{Animal animal = new Animal();animal.InitializeByType(10);animal.x = arrx[i];animal.y = arry[i];animalList.Add(animal);    //将animal加入到animalList队列中}for (int i = 19; i < 24; i++)     //控制生成墙壁的数量{Animal animal = new Animal();animal.InitializeByType(9);animal.x = arrx[i];animal.y = arry[i];animalList.Add(animal);    //将animal加入到animalList队列中}//=========================================

  1. 在定时器中调用world世界中的NextRound方法:world.NextRound();每调用一次使整个世界到达下一个时刻,并在world世界的Clear方法中清除每一次调用NextRound方法时物体运动所留下的痕迹。
void Clear()        //清除痕迹{Graphics g = Graphics.FromImage(bmp);g.Clear(Color.Black);}

  1. 在NextRound中判断animalList列表中所有物体的x、y坐标之差,当它们小于35时,在Meet函数中,运用type和bExist属性,根据不同两个物体的相遇处理不同的事件。例如:当己方子弹和坦克相遇时,敌方坦克被击毁,子弹和坦克从链表中移除。当坦克碰到墙壁时反弹,遇到草地时则可以穿过去。
//============己方子弹互销===================
if ((type == 2||type==3||type==4||type==5||type==6||type==7||type==8||type==10||type==12||type==13) && (oAnimal.type == 1))  //碰到1己方子弹时消失(死亡)
{bExist = false;
}
if ((type == 1 ) && (oAnimal.type == 2||oAnimal.type==3||oAnimal.type==4||oAnimal.type==5||oAnimal.type==6||oAnimal.type==7||oAnimal.type==8||oAnimal.type==9||oAnimal.type==10||oAnimal.type==12||oAnimal.type==13))     //碰到1的图片时消失(死亡)
{bExist = false;
}
//========敌方子弹13碰到9铁墙时,子弹消失===================
if ((type == 13) && (oAnimal.type == 9))
{bExist = false;
}

  1. 己方坦克的转向是在KeyPress中通过键盘触发,按下不同的方向键时更换对应方向的坦克图片。敌方坦克的转向处理,则是在NextRound中产生一个1至100的随机数,分别给每一个方向的图片赋一个1至100之间的值,当产生的随机数等于某一个方向上的值时,则替换该坦克为对应方向的图片。敌方坦克发射的子弹也是通过类似方法触发,等于某一个随机数时敌方坦克发射一颗子弹。
//============敌方子弹===================Random rand = new Random(); //系统自带的随机数类int x=rand.Next(1, 100);if (x == 23){animal.x = animalList[2].x;                     //位置animal.y = animalList[2].y;animal.directionX_1 = animalList[2].directionX;   //方向animal.directionY_1 = animalList[2].directionY;animal.InitializeByType(13);animal.velocity = 4;   //速度animalList.Add(animal);}
//===========敌方转向======================int y = rand.Next(1, 100);if (y == 3){animalList[2].directionX = 2;   //方向animalList[2].directionY = 0;animalList[2].image = "gif\\tk02_y.gif";}if (y == 5){animalList[2].directionX = -2;   //方向animalList[2].directionY = 0;animalList[2].image = "gif\\tk02_z.gif";}………………
设置了文字大小与颜色

项目源码与视频

需要这个小游戏项目源码的,可以到微信公众号 遇见0和1 输入关键词“坦克大战小游戏”获取,需要C#基础视频的,就回复关键词 C#视频 免费获取,欢迎小伙伴入坑哦!

C#自制坦克大战小游戏相关推荐

  1. 【180930】坦克大战小游戏源码

    坦克大战小游戏源码程序实现了小霸王游戏机上坦克大战的功能,主要功能是开火.移动.3种不同的敌方坦克.用户自制地图等,缺点是有些小细节还处理的不好,感觉画面不够好,还没实现自动的下一关功能(主要是嫌做默 ...

  2. Java实现的经典坦克大战小游戏

    Java实现的经典坦克大战小游戏 先看一下游戏结构: 有点多,没有耐心的可以不用看,这里先给出链接吧! 云链接:经典坦克大战 提取码:s9ai 这里就不介绍功能了,贴了一张游戏运行的截图,具体的功能自 ...

  3. 【JAVA程序设计】基于JAVA的坦克大战小游戏--入门级小游戏

    基于JAVA的坦克大战小游戏--入门级小游戏 零.项目获取 一.项目简介 二.开发环境 三.游戏玩法 四.运行截图 零.项目获取 获取方式(点击下载):是云猿实战 项目经过多人测试运行,可以确保100 ...

  4. html实现经典坦克大战小游戏

    文章目录 1.设计来源 1.1 游戏主界面 1.2 游戏界面 2.效果和源码 2.1 动态效果 2.2 源代码 源码下载 作者:xcLeigh 文章地址:https://blog.csdn.net/w ...

  5. C++实用编程——坦克大战小游戏

    C++实用编程--坦克大战小游戏 Warning: 转载类 原文地址:*HTML https://yq.aliyun.com/articles/683666 改变速度的玩意坏了 我们直接看代码吧,适于 ...

  6. canvas+js实现简单的坦克大战小游戏

    使用canvas和js实现经典的坦克大战并不难,坦克和炮弹的绘制可以使用canvas的里API画出,而坦克的移动和炮弹的发射可以依赖于键盘事件和定时器来实现. 在这里我要实现的坦克大战是双人模式,有木 ...

  7. 坦克大战小游戏关键技术总结

    这两天参照韩顺平的坦克大战游戏并在其基础上初步完善成一个小的页面游戏,最终js代码大约570行,html代码200多行,具体可参见https://github.com/Mrkaiyang/Art/tr ...

  8. 用HTML语言写一段坦克大战小游戏

    好的,我会尽力帮助你. 你可以使用 HTML 写一个坦克大战的小游戏,代码大概长这样: <!-- 这是 HTML 代码 --> <html><head><ti ...

  9. python3小游戏代码教程_Python3制作仿“经典90坦克大战”小游戏|python3教程|python入门|python教程...

    https://www.xin3721.com/eschool/pythonxin3721/ 本文转载至知乎ID:Charles(白露未晞)知乎个人专栏 下载W3Cschool手机App,0基础随时随 ...

  10. Python3制作仿“经典90坦克大战”小游戏

    导语 本期我们将制作一个仿"经典90坦克大战"的小游戏.啊,想起来上一次玩这个游戏的时候才小学呢.T_T真是一款暴露年龄的游戏. 算了废话不多说,让我们愉快地开始吧~ 相关文件 百 ...

最新文章

  1. struts2拦截器遇到的问题
  2. Keras保存和载入训练好的模型和参数
  3. 秒表项目_【速看】2021年陕西中考体育怎么考?中考体育项目及考试评分标准最全整理来了!...
  4. Python学习笔记:常用内建模块2:collections
  5. 为什么 HashMap 常用 String 对象作 key
  6. 一个用理性设计的搞笑游戏
  7. JavaFX技巧18:路径剪切
  8. ARM 指令集 VS Thumb 指令集
  9. 【LeetCode笔记】148. 排序链表(Java、归并排序、快慢指针、双重递归)
  10. ap计算机科学ab,AP微积分AB_AP科目介绍|AP考试网
  11. java控制台输入输出
  12. ROS配置环境搞错了,每次开终端都有bash: export: `/home/yyq/ork_ws/devel/setup.bash‘: 不是有效的标识符
  13. 第1章 数据库系统概论-单元测验-数据库原理及应用
  14. 社会工程学(科普篇)
  15. 初级Java程序员如何向Java架构师进阶?这里有6个建议
  16. ccy 朴素版(顺序搜索)19ms
  17. raid读写速度对比_组建RAID 0前后的读写速度对比
  18. 笔记本计算机无法上无线网络,笔记本连不上无线网络如何解决?
  19. 易语言从c盘开始搜索文件夹,易语言递归寻找文件及文件夹
  20. 用友NC 如何进行增补模块

热门文章

  1. PHP运行Python脚本
  2. MySQL -update语句流程总结
  3. 记录-QuartuesⅡ-Qsys自定义数码管IP过程以及遇到的源文件路径问题
  4. android触屏对焦_Android自定义相机实现自动对焦和手动对焦
  5. 再次推荐下这本书 —— DDIA
  6. Clickhouse(20.4.2.9) SSB性能测试
  7. 塑料模具加工的工艺流程在注塑行业
  8. 分享两个超好用的在线制图工具
  9. Android 使用 百度地图 测量 多边形面积
  10. Albumentation使用指南