java坦克大战遍历敌方坦克现在是用的普通for循环,如果改用增强for循环怎么实现?

各位不充VIP的小盆友,福利来啦!!

废话不多说,献上代码!

(懒得可以直接复制哈)

//程序中未写入函数参数表中且未说明的变量只有map二维数组,level_info数组和level 此程序中涉及的x,y类的坐标值,分为以下两种: 假坐标:这里的坐标指的是以一个■长度为单位的坐标,而不是真正的coord坐标 (用于map数组的坐标) 真坐标:头文件自带的坐标结构coord中的坐标(也可以说是控制台里的真正坐标值) 区别:纵坐标y两值一致,假横坐标x值与真正coord横坐标(真坐标)关系是 x * 2 = coord 横坐标 coord横坐标既指GoTo函数中的x参数,因为本程序游戏界面以一个■长度为基本单位, 可以说涉及的coord横坐标全是偶数。既假坐标要变真坐标(变真坐标才能发挥真正作用),横坐标须乘以2 } LevInfo; //关卡信息(准确说是该关出现的坦克信息) bool initial; //子弹是否处于建立初状态的值,1为处于建立初状态,0为处于非建立初状态 bool my; //区分AI子弹与玩家子弹的标记,0为AI子弹,1为玩家(我的)子弹 int color; //颜色参方向数,1到6分别代表不同颜色,具体在PrintTank函数定义有说明 int model; //坦克图案模型,值为1,2,3,分别代表不同的坦克图案,0为我的坦克图案,AI不能使用 int stop; //只能是AI坦克使用的参数,非0代表坦克停止走动,0为可以走动 int num; //AI坦克编号(固定值,为常量,初始化函数中定下)0~3 bool my; //是否敌方坦克参数,我的坦克此参数为1,为常量 //∵所有的函数都有可能对全局变量map进行读写(改变), //∴函数中不另说明是否会对全局变量map读写 //基本操作与游戏辅助函数 //注意map数组应是纵坐标在前,横坐标在后,既map[y][x],(∵数组行长度在前,列长度在后) //map里的值: 个位数的值为地图方块部分,百位数的值为坦克,子弹在map上没有值(子弹仅仅是一个假坐标) //map里的值: 0为可通过陆地,1为红砖,2黄砖,5为水,100~103为敌方坦克,200为我的坦克, int key_x; // X键是否被“读入”的变量,也是子弹是否可以发射的变, srand(time(NULL)); //设置随机数种子(若不设置种子而调用rand会使每次运行的随机数序列一致)随机数序列指:如首次调用rand得到1,第二次得2,第三次3,则此次随机数序列为1,2,3 { //如果坦克不存活。计时,每次建立有间隔 1750 ms break; //每次循环只建立一个坦克 /*//这里的多线程暂时不用 //x键用于子弹发射,x键的冷却时间不能和上下左右一同设置,那样就太快了 { //因为只有一个变量改变,而且变量改变先后顺序是显而易见的,所以不必设置缓冲区 key_x=1; // X键是否允许被“读入”的变量,也是子弹是否可以发射的变量 Sleep(600); // 子线程Sleep中,x就不能被"读入",主线程每操作完一次子弹发射,key_x会归零 函数功能:该函数判断在此函数被调用时,某个键是处于UP状态还是处于DOWN状态,及前次调用GetAsyncKeyState函数后, 是否按过此键.如果返回值的最高位被置位,那么该键处于DOWN状态;如果最低位被置位,那么在前一次调用此函数后,此键被按过, 否则表示该键没被按过. 一个是最高位bit的值,代表这个键是否被按下。一个是最低位bit的值,代表上次调用GetAsyncKeyState后,这个键是否被按下。 &为与操作,&0x8000就是判断这个返回值的高位字节。如果high-order bit是1,则是按下状态,否则是弹起状态,为0 if(!(rand()%11)) //冷却结束后在随后的每个游戏周期中有10分之一的可能发射子弹 { //若是AI朝下并且我的坦克在AI坦克下方(数值大的在下面)或者AI朝上我的坦克在AI上方 { //若是AI朝右并且我的坦克在AI坦克右方(数值大的在下面)或者AI朝左我的坦克在AI左方 { //∵实现方式为顺序循环建立子弹,每次调用改变的bullet数组元素都不同 bul_num=0; //考虑到地图上不可能同时存在20颗子弹,所以数组元素设置20个 if( collide ) //如果检测到当前子弹坐标无障碍(无碰撞)(包括在地面上与在水面上) { //同样的两颗我方子弹不可能产生碰撞 { //∵每次打中的坦克都不一样,不可能把所有坦克放在参数表中 my_tank.revive++; //我的坦克复活次数+1(∵我的坦克复活次数与生命值有关∴放在这里自减) { //有障碍返回0,无障碍且子弹在地面返回1,子弹在水面上返回2 //position为坦克生成位置,-1为左位置,0为中间,1为右,2为我的坦克位置 return ; //若生成了一辆坦克,则结束该函数 return 0; //则返回0,表示此生成位置有阻碍 return 1; //否则生成1,表示此生成位置无阻碍 else //另外3分之2的几率选择正确的方向 if(j==5) //j==5说明此坦克四周都有障碍物,无法通行 } //若坦克当前方向上有障碍则跳过坐标变化直接打印该转向的坦克 { //将坦克占用的地图上的九格去掉 ColorChoose(tank.color); //颜色选择函数 定义一个数组里装着字符指针(既装字符串)的数组指针(指向一维数组首地址的指针) case 7: //深蓝色(∵颜色深难与黑色背景辨识度不高 ∴坦克颜色不选用此颜色),只用在字体颜色闪烁中 void ClearMainScreen() //主屏幕清屏函数,因使用system("cls");再打印框架有一定几率造成框架上移一行的错误,所以单独编写清屏函数 printf(" ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ "); printf(" ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ "); GoToxy(38,38); printf("███"); //∵无论地图怎么变,家所在位置不变,且家的字符多种,不方便用上述方式打印 { //map里的值: 个位数的值为地图方块部分,百位数的值为坦克 int i ,j; //map里的值: 0为可通过陆地,1为红砖,2待定,5为水,100为敌方坦克,200为我的坦克, if(home) //游戏结束原因为老家被毁,则多打印一行字以提示玩家 // system("cls"); //清屏,这里清屏后再次打印框架有一定几率造成框架上移一行的bug,因此选用自建清屏函数 { //剩余敌人为0且四坦克全部不存活 GameOver(0); //游戏结束,传入0代表我的复活次数用光(生命值为0)。游戏结束有两种判断,另一种是老家被毁
}

逢七拍腿游戏 几个小朋友在一起玩逢七拍腿的游戏,从1开始数数,当数到7的倍数或者尾号是7时,拍一下腿。现在从1数到99,假设每个人都没有错,计算一下共要拍腿几次? 第一种实现思路:通过在for循环语句中使用continue语句来实现计算拍腿次数。首先假设可拍腿次数为最高次数99,每触发满足的条件的时候就直接跳转到下一次循环当中,最后的total减1则不执行,不满足条件时total则减1。因此实际上total减去的是不满足条件的数字,代码如下: total = 99 #记录拍腿次数的变量 for number in range(1,100):

}

我要回帖

更多关于 经典坦90克大战怎么加命 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信