C语言一单挑游戏程序

合集下载

c语言编写的小游戏

c语言编写的小游戏

C语言编写的小游戏介绍C语言是一种广泛使用的编程语言,它的语法简洁且功能强大。

我们可以使用C语言编写各种应用程序,包括小游戏。

本文将介绍如何使用C语言编写一个简单的小游戏,并提供一些编码技巧。

游戏规则在我们的小游戏中,玩家需要通过键盘控制一个角色,使其躲避障碍物并尽可能多地获得分数。

角色可以在屏幕的一个区域内移动,障碍物将从屏幕的上方不断下落。

如果角色与障碍物发生碰撞,游戏结束。

玩家可以通过按下空格键开始游戏和重新开始。

游戏设计我们将使用C语言的图形库来实现游戏界面。

这里推荐使用ncurses库,它提供了一套简单易用的API来控制终端窗口。

在开始编写游戏逻辑之前,我们需要先安装ncurses库,具体安装方法请参考相关文档。

游戏逻辑游戏逻辑的实现主要包括以下几个方面:初始化在游戏开始时,我们需要初始化终端窗口并设置相应的参数。

可以通过initscr()函数初始化窗口,并使用noecho()函数关闭字符回显功能。

然后使用curs_set(0)函数将光标设为不可见。

最后,使用refresh()函数刷新终端窗口。

绘制角色和障碍物在游戏中,我们需要绘制角色和障碍物。

我们可以使用mvprintw()函数在指定的位置打印字符来绘制角色和障碍物。

另外,我们可以使用attron()函数设置字符的颜色,以增加游戏的可视化效果。

按键控制玩家通过键盘控制角色的移动。

我们可以使用getch()函数获取键盘输入,并根据不同的按键来改变角色的位置。

例如,可以使用KEY_LEFT和KEY_RIGHT来控制角色左右移动。

需要注意的是,在获取键盘输入之前,我们需要使用nodelay()函数设置输入为非阻塞模式,以避免游戏的卡顿。

碰撞检测在游戏中,我们需要检测角色和障碍物是否发生碰撞。

我们可以定义一个函数来判断两个对象的位置是否重叠,如果重叠则表示发生碰撞,游戏结束。

循环逻辑在游戏中,我们需要不断地更新屏幕上的角色和障碍物的位置。

可以使用一个循环来实现这个逻辑。

如何用c语言编写小游戏

如何用c语言编写小游戏

如何用c语言编写小游戏----------------------------精品word文档值得下载值得拥有----------------------------------------------纯真童趣的《泡泡堂》,还有武林情仇,笑傲江湖的《剑侠情缘online》.它是e时代常谈的话题,是交互式娱乐的主力军,是一种高层次的综合艺术,更是一个民族的文化,世界观的全新传播方式.作为游戏玩家的我们,是不是想设计一个属于自己的游戏呢?爱玩是人的天性,而C语言是我们计算机专业都要学习的一门基础学科.一般来说,是比较枯燥的.那么,我们能不能通过编一些小游戏来提高它的趣味性呢?这样学习程序设计,就不会是一件艰苦----------------------------精品word文档值得下载值得拥有--------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----------------------------精品word文档值得下载值得拥有----------------------------------------------,枯燥的事,它变得象电脑游戏一样充满好奇,富有乐趣.这正是我发贴的目的.1, 总是从Hello,world开始学习编程的第一个程序,一般就是打印一个亲切的词语——"Hello,world!".让我们来看看这个最简单的C程序:#incolude <stdio.h> /*把输入输出函数的头文件包含进来*/int main(){printf("Hello,----------------------------精品word文档值得下载值得拥有---------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------精品word文档值得下载值得拥有----------------------------------------------world!");/*在屏幕上输出字符串"Hello,world!"*/return 0;/*退出main函数,并返回0*/}下面我们发现几个值得改进的地方,1,程序的运行结果一闪而过.2,每执行这个程序一次都能看见上次运行留下的字符.3,我们还希望屏幕输出一个笑脸来欢迎我们.(大家不要小看了这个笑脸曾经有人发贴专门问呢)让我们来改进一下这个程序吧!1,在return语句的前面加一句:getch----------------------------精品word文档值得下载值得拥有---------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------精品word文档值得下载值得拥有----------------------------------------------();,表示按任意键结束.2,在printf语句前用clrscr函数清屏,要使用这个函数和getch函数,需要在程序开头再包含头文件conio.h.3,ASCII码也有许多非常好玩的字符,比如ASCII码值为2的就是一个笑脸,我们可以用printf("%c", 2)来输出一个笑脸.现在我们把Hello,world程序改成一个更好看的Hello,world了.下面让我们开始做游戏吧!2, 心动的开始,一个运动中的笑脸----------------------------精品word文档值得下载值得拥有---------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------精品word文档值得下载值得拥有----------------------------------------------大家小时侯喜欢看动画片吗?哈哈,我猜你们都喜欢吧!下面就让我们来做一个小动画吧.在屏幕上显示一个运动的小笑脸,而且当它到达屏幕的边缘时会自动弹回来.先在程序定义一个在屏幕中运动的点的结构:struct move_point{int x, y;/*该点的位置,包括x坐标和y坐标*/int xv, yv;/*该点在x轴,y轴的速度*/----------------------------精品word文档值得下载值得拥有---------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------精品word文档值得下载值得拥有----------------------------------------------};运动的原理是,先擦去物体先前的轨迹,让物体按其速度移动一段距离,再画出该物体.让我们看到以下代码:gotoxy(man.x, man.y);/*把光标移到指定的坐标*/printf(" ");/*输出一个空格,把先前的字符擦去*/然后我们让物体按其速度运动:man.x += man.xv;/*水平方向按x轴的速度运动*/man.y += man.yv;/*垂直方向按y轴的速度运动*/----------------------------精品word文档值得下载值得拥有--------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----------------------------精品word文档值得下载值得拥有----------------------------------------------运动后还要判断物体是否出界,如果出了界,就令物体反弹,即让它下一刻的速度等于现在的速度的相反数.最后打印出这个笑脸:gotoxy(man.x, man.y);printf("%c\b", 2); /*输出ASCII码值为2的"笑脸"字符*/怎么样?是不是很有趣呢?不过这个笑脸一直是自己运动,能不能让我们来控制它运动呢?答案是肯定的,让我们继续往下学吧!3, 交互的实现——让我们来控制笑脸运动----------------------------精品word文档值得下载值得拥有---------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------精品word文档值得下载值得拥有----------------------------------------------这个程序的主要功能是接受按键,如果接收的是方向键,就让笑脸顺着方向移动,如果接收的是ESC键就退出程序,其他按键则忽略处理.接受按键我们用以下两条语句:while (bioskey(1) == 0);/*等待按键*/key = bioskey(0);/*把接收的按键的键盘码赋给变量key*/然后用switch语句来判断按键以及执行相关操作,如下:switch (key) /*对变量key的值进行判断*/{----------------------------精品word文档值得下载值得拥有---------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------精品word文档值得下载值得拥有----------------------------------------------case UP: /*如果按的是向上键*/… break; /*让物体向上运动,并退出switch*/case DOWN: /*如果按的是向下键*/… break; /*让物体向下运动,并退出switch*/case LEFT: /*向左键*/… break;;/*向左运动*/case RIGHT: /*向右键*/… break;/*向右运动*/default:break;/*其他按键则忽略处理*----------------------------精品word文档值得下载值得拥有---------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------精品word文档值得下载值得拥有----------------------------------------------/}怎么样,是不是有了玩游戏的感觉了?不过这个程序没有什么目的,也没有什么判断胜负的条件.下面我们就利用这个能控制它移动的笑脸来做一个更有趣的游戏吧!4, 在迷宫中探索小时侯,我常在一些小人书和杂志上看见一些迷宫的游戏,非常喜欢玩,还常到一些书上找迷宫玩呢.好的,现在我们用C语言来编个迷宫的游戏,重温一下童年的乐趣.----------------------------精品word文档值得下载值得拥有---------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------精品word文档值得下载值得拥有----------------------------------------------首先,我们定义一个二维数组map,用它来保存迷宫的地图,其中map[x][y] == '#'表示在(x,y)坐标上的点是墙壁.DrawMap函数在屏幕上输出迷宫的地图和一些欢迎信息.在main函数里,我们定义了"小人"man的坐标和"目的地"des的坐标.在游戏循环中,我们增加了一些用来判断胜负的语句:if (man.x == des.x && man.y == des.y) /*如果人的坐标等于目的地的坐标*/----------------------------精品word文档值得下载值得拥有---------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------精品word文档值得下载值得拥有----------------------------------------------{gotoxy(35, 3);printf("Ok! You win!"); /*输出胜利信息*/….}在判断按键时,如果玩家按的是方向键,我们还要先判断前面是不是有"墙壁",如果有的话,就不能往前移动了.好的,我们在判断按键的switch语句的各个分支加上了判断语句,如下:if (map[…][…] == '#') break;/*如----------------------------精品word文档值得下载值得拥有---------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------精品word文档值得下载值得拥有----------------------------------------------果前面是墙壁,就不执行下去*/哇噻!真棒,我们做出了一个完整的游戏了.当然你还可以通过修改二维数组map来修改迷宫的地图,让它更有挑战性.不过,我们要设计一个更好玩的游戏——5, 聪明的搬运工大家一定玩过"搬运工"的游戏吧!这是在电脑和电子字典上较流行的益智游戏,让我们动手做一个属于自己的"搬运工"吧!程序依然用数组map来保存地图,数组元----------------------------精品word文档值得下载值得拥有---------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------精品word文档值得下载值得拥有----------------------------------------------素如果为空格则表示什么也没有,'b'表示箱子,'#'表示墙壁,'*'表示目的地,'i'表示箱子在目的地.我们以后每推一下箱子,不但要改变屏幕的显示,也要改变map相应元素的值.游戏的主循环依然是接受按键.当接收一个方向键,需要判断小人前面一格的状态,如果是空地或目的地,则人物可以直接移动;如果是墙壁,则不可移动;如果是箱子或目的地上的箱子,则需要继续判断箱子前面一格的状态:如果前一格是空地或目的地,则人推----------------------------精品word文档值得下载值得拥有---------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------精品word文档值得下载值得拥有----------------------------------------------箱子前进,否则不可移动.好的,我们在switch中增加了这些判断语句.程序还有一个重要的功能就是判断胜利.数组Des用来记录全部目的地的坐标,我们每执行一步操作后,程序就要通过Des数组判断这些目的地上是否都有箱子了.真棒啊!我们可以做游戏了.而且是一个老少皆宜,趣味十足的游戏呢!当然,我们可以通过修改map数组来制作不同的游戏地图,我们还可以相互分享好的游戏地图呢.----------------------------精品word文档值得下载值得拥有---------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------精品word文档值得下载值得拥有----------------------------------------------尾声:在C++等高级语言还没出来的时候,很多应用程序也是C语言开发的.C语言在与硬件联系紧密的编程中,也占有重要地位.其实我觉得学习编程,可以通过一些小游戏,实用的例子来学习.象学习音乐的人,不是要等到把全部乐理学完后才演奏一个完整的曲子.而是刚开始学时就有一些简单的曲子让你演奏,让你立刻就有成就感,让你很快就能卖弄出来在别人面前表现自己了.通过编----------------------------精品word文档值得下载值得拥有---------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------精品word文档值得下载值得拥有----------------------------------------------游戏来学习编程,把学习变成游戏,不失为学习计算机的一种好方法.好了,编游戏就这么简单,希望大家也尝试用C语言或其他的语言来做几个自己喜欢的小游戏.----------------------------精品word文档值得下载值得拥有---------------------------------------------- -----------------------------------------------------------------------------------------------------------------------------。

C战争游戏

C战争游戏

/**********************************功能:用c语言实现两军对战游戏*完成时间:2011.9.26*版本:0.0-2011.9.26********************************/#include<stdio.h>#include<unistd.h>//包含时间函数sleep();#include<stdlib.h>#define NUM10void array_init(void);void array_add(int,int,int);void search_attack(int,int);void warfare_set(void);void select_war_mode(void);void select_people_mode(void);void select_money_mode(void);void realtime_print(void);int x_red,x_blue;//确定地图犯围即上下界int redTotal,blueTotal;//输入的红蓝各自总人数int attackNum=0;//红蓝攻击次数int critical=0;//暴击次数/////////////////////////////////////////////////////定义士兵屬性为结构体//////////////////////////////////////// typedef struct{int red_blue;//红军为0,蓝军为1char service;//存放兵种:1-G-弓箭手,2-A-步兵,3-F-骑士,空格int blood;//血量int defense;//防御力int assault;//攻击力int range;//攻击范围}SOLID;////////////////////////////////////////////////////定义60*60结构体数组///////////////////////////////////////// SOLID solider[60][60];void main(){array_init();//双方军队阵型-数组-初始化函数,定义地图范围并全部为空格warfare_set();//战争模式设定select_war_mode();//调用战斗模式函数}//////////////////////////////////////双方军队阵型-数组-初始化函数,定义地图范围并全部为空格/////////////////////////////////////////void array_init(void){int i,j;SOLID kill_disappear={3,'',0,0,0,0};//定义空的结构体for(i=0;i<60;i++){for(j=0;j<60;j++){solider[i][j]=kill_disappear;}}}//////////////////////////////////////双方军队阵型-数组-添加值函数,将双方各自队员布置完整/////////////////////////////////////////void array_add(int redblue,int type,int number){int i,j;int x,y;//////////////////////////如果为--红军--士兵,从中间向上方按位置顺次排放if(redblue==0){redTotal+=number;//寻找上次布兵结束时的位置,然后顺次排放for(i=0;i<25;i++){for(j=0;j<60;j++){if(solider[i][j].red_blue==0||(i==24&&j==59))break;}if(solider[i][j].red_blue==0||(i==24&&j==59))break;}if((i==24)&&(j==59)&&(solider[i][j].red_blue==3))//开始红军第一个位置{x=24;y=59;}else if(j==0)//上次是在行首结束{x=i-1;y=59;}else//不是最开始处也不是行首结束{x=i;y=j-1;}//开始接上次结束处顺次存放红军士兵for(i=x;i>=0;i--){for(j=y;(number>0)&&(j>=0);j--){number--;switch(type){case1://红军弓箭手{solider[i][j].red_blue=0;solider[i][j].service='G';solider[i][j].blood=100;solider[i][j].defense=1;solider[i][j].assault=18;solider[i][j].range=3;}break;case2://红军步兵{solider[i][j].red_blue=0;solider[i][j].service='A';solider[i][j].blood=150;solider[i][j].defense=3;solider[i][j].assault=15;solider[i][j].range=1;}break;case3://红军骑士{solider[i][j].red_blue=0;solider[i][j].service='F';solider[i][j].blood=200;solider[i][j].defense=5;solider[i][j].assault=20;solider[i][j].range=3;}break;default:break;}}if(number>0&&j==-1)//到达行首但未结束{y=59;}if(number==0){x_red=i;//记录红军最尾端的行作标作为以后打印的范围上界break;}}}/////////////////////////如果为--蓝军--士兵,从中间向下方按位置顺次排放if(redblue==1){blueTotal+=number;//寻找上次蓝军布兵结束时的位置,然后顺次排放for(i=59;i>=35;i--){for(j=59;j>=0;j--){if(solider[i][j].service!=''||(i==35&&j==0))break;}if(solider[i][j].service!=''||(i==35&&j==0))break;}if(i==35&&j==0&&solider[i][j].service=='')//开始蓝军第一个位置{x=i;y=j;}else if(j==59)//上次是在行尾结束{x=i+1;y=0;}else//非开始处结束也非行尾结束{x=i;y=j+1;}//开始接上次结束处顺次存放蓝军士兵for(i=x;i<60;i++){for(j=y;(number>0)&&(j<60);j++){number--;switch(type){case1://蓝军弓箭手{solider[i][j].red_blue=1;solider[i][j].service='g';solider[i][j].blood=100;solider[i][j].defense=1;solider[i][j].assault=18;solider[i][j].range=3;}break;case2://蓝军步兵{solider[i][j].red_blue=1;solider[i][j].service='a';solider[i][j].blood=150;solider[i][j].defense=3;solider[i][j].assault=15;solider[i][j].range=1;}break;case3://蓝军骑士{solider[i][j].red_blue=1;solider[i][j].service='f';solider[i][j].blood=200;solider[i][j].defense=5;solider[i][j].assault=20;solider[i][j].range=3;}break;default:break;}}if(number>0&&j==60)//到达行尾但未结束{y=0;}if(number==0){x_blue=i;//记录蓝军最尾端的行作标作为以后打印的范围下界break;}}}}////////////////////////////////////////////////////移动前进-战斗函数/////////////////////////////////////////void move_attack(void){int i,j;int iTmp;//记录当前行坐标判断正前方是否还有人,作循环用int flag=0;//标记前方是否已无敌人SOLID kill_disappear={3,'',0,0,0,0};//定义空的结构体//蓝军开始前进///////////////////////////////////////////////////////////////////////////////////////////////////////////////// for(i=x_red;i<=x_blue;i++)//从最前面的蓝军士兵开始向前运动{for(j=29;j>=0;j--){if(solider[i][j].red_blue==1){if(solider[i][j].service=='g'||solider[i][j].service=='a')//如果为红军-弓箭手-或-步兵-判断是否可以移动{flag=0;for(iTmp=i;iTmp>=x_red;iTmp--)//判断在i上是否已经没有人,没有则不进行前进开始左右移动{if(solider[iTmp][j].red_blue==0){flag=1;break;}}if(solider[i-1][j].service==''&&1==flag)//正前方仍有人,继续前进{solider[i-1][j]=solider[i][j];solider[i][j]=kill_disappear;}if(flag==0&&j<30&&solider[i][j+1].service=='')//正前方没有人,j<30,则选择靠近j=30的方向移动{solider[i][j+1]=solider[i][j];solider[i][j]=kill_disappear;}if(random()%NUM==0){if(flag==1&&solider[i][j+1].service==''){solider[i][j+1]=solider[i][j];solider[i][j]=kill_disappear;}if(flag==1&&solider[i+1][j].service==''){solider[i+1][j]=solider[i][j];solider[i][j]=kill_disappear;}}}////////////////////////////////////如果为红军骑兵判断是否可以移动if(solider[i][j].service=='f'){flag=0;//初始化标志位for(iTmp=i;iTmp>=x_red;iTmp--)//判断在i上是否已经没有人,没有则不进行前进开始作右移动{if(solider[iTmp][j].red_blue==0){flag=1;break;}}if(solider[i-1][j].service==''&&solider[i-2][j].service==''&& solider[i-3][j].service==''&&1==flag)//正前方仍有人,继续前进{solider[i-3][j]=solider[i][j];solider[i][j]=kill_disappear;}if(solider[i-1][j].service==''&&solider[i-2][j].service==''&&1==flag){solider[i-2][j]=solider[i][j];solider[i][j]=kill_disappear;}if(solider[i-1][j].service==''&&1==flag){solider[i-1][j]=solider[i][j];solider[i][j]=kill_disappear;}if(0==flag&&j<28&&solider[i][j+1].service==''&& solider[i][j+2].service==''&&solider[i][j+3].service=='')//j<30的骑士向中间移动{solider[i][j+3]=solider[i][j];solider[i][j]=kill_disappear;}if(0==flag&&j<29&&solider[i][j+1].service==''&& solider[i][j+2].service==''){solider[i][j+2]=solider[i][j];solider[i][j]=kill_disappear;}if(0==flag&&j<30&&solider[i][j+1].service==''){solider[i][j+1]=solider[i][j];solider[i][j]=kill_disappear;}if(random()%NUM==0){if(flag==1&&solider[i][j+1].service==''){solider[i][j+1]=solider[i][j];solider[i][j]=kill_disappear;}if(flag==1&&solider[i+1][j].service==''){solider[i+1][j]=solider[i][j];solider[i][j]=kill_disappear;}}///////////////////////////////////////}}}for(j=30;j<60;j++){if(solider[i][j].red_blue==1){if(solider[i][j].service=='g'||solider[i][j].service=='a')//如果为红军-弓箭手-或-步兵-判断是否可以移动{flag=0;for(iTmp=i;iTmp>=x_red;iTmp--)//判断在i上是否已经没有人,没有则不进行前进开始左右移动{if(solider[iTmp][j].red_blue==0){flag=1;break;}}if(solider[i-1][j].service==''&&1==flag)//正前方仍有人,继续前进{solider[i-1][j]=solider[i][j];solider[i][j]=kill_disappear;}if(flag==0&&j>30&&solider[i][j-1].service=='')//正前方没有人,j>30,则选择靠近j=30的方向移动{solider[i][j-1]=solider[i][j];solider[i][j]=kill_disappear;}if(random()%NUM==0){if(flag==1&&solider[i][j+1].service==''){solider[i][j+1]=solider[i][j];solider[i][j]=kill_disappear;}if(flag==1&&solider[i+1][j].service==''){solider[i+1][j]=solider[i][j];solider[i][j]=kill_disappear;}}}////////////////////////////////////如果为红军骑兵判断是否可以移动if(solider[i][j].service=='f'){flag=0;//初始化标志位for(iTmp=i;iTmp>=x_red;iTmp--)//判断在i上是否已经没有人,没有则不进行前进开始作右移动{if(solider[iTmp][j].red_blue==0){flag=1;break;}}if(solider[i-1][j].service==''&&solider[i-2][j].service==''&& solider[i-3][j].service==''&&1==flag)//正前方仍有人,继续前进{solider[i-3][j]=solider[i][j];solider[i][j]=kill_disappear;}if(solider[i-1][j].service==''&&solider[i-2][j].service==''&& 1==flag){solider[i-2][j]=solider[i][j];solider[i][j]=kill_disappear;}if(solider[i-1][j].service==''&&1==flag){solider[i-1][j]=solider[i][j];solider[i][j]=kill_disappear;}if(0==flag&&j>32&&solider[i][j-1].service==''&& solider[i][j-2].service==''&&solider[i][j-3].service=='')//j>30的骑士向中间移动{solider[i][j-3]=solider[i][j];solider[i][j]=kill_disappear;}if(0==flag&&j>31&&solider[i][j-1].service==''&& solider[i][j-2].service==''){solider[i][j-2]=solider[i][j];solider[i][j]=kill_disappear;}if(0==flag&&j>30&&solider[i][j-1].service==''){solider[i][j-1]=solider[i][j];solider[i][j]=kill_disappear;}if(random()%NUM==0){if(flag==1&&solider[i][j+1].service==''){solider[i][j+1]=solider[i][j];solider[i][j]=kill_disappear;}if(flag==1&&solider[i+1][j].service==''){solider[i+1][j]=solider[i][j];solider[i][j]=kill_disappear;}}if(random()%NUM==0){if(flag==1&&solider[i][j-1].service==''){solider[i][j-1]=solider[i][j];solider[i][j]=kill_disappear;}if(flag==1&&solider[i-1][j].service==''){solider[i-1][j]=solider[i][j];solider[i][j]=kill_disappear;}}///////////////////////////////////////}}}}//红军先前进,蓝军后前进/////////////////////////////////////////////////////////////////////////////////////// for(i=x_blue;i>=x_red;i--)//从最前面的红军士兵开始向前运动{for(j=29;j>=0;j--){if(solider[i][j].red_blue==0){if(solider[i][j].service=='G'||solider[i][j].service=='A')//如果为红军-弓箭手-或-步兵-判断是否可以移动{flag=0;for(iTmp=i;iTmp<=x_blue;iTmp++)//判断在i上是否已经没有人,没有则不进行前进开始左右移动{if(solider[iTmp][j].red_blue==1){flag=1;break;}}if(solider[i+1][j].service==''&&1==flag)//正前方仍有人,继续前进{solider[i+1][j]=solider[i][j];solider[i][j]=kill_disappear;}if(flag==0&&j<30&&solider[i][j+1].service=='')//正前方没有人,j<30,则选择靠近j=30的方向移动{solider[i][j+1]=solider[i][j];solider[i][j]=kill_disappear;}if(random()%NUM==0){if(flag==1&&solider[i][j+1].service==''){solider[i][j+1]=solider[i][j];solider[i][j]=kill_disappear;}if(flag==1&&solider[i+1][j].service==''){solider[i+1][j]=solider[i][j];solider[i][j]=kill_disappear;}}if(random()%NUM==0){if(flag==1&&solider[i][j-1].service==''){solider[i][j-1]=solider[i][j];solider[i][j]=kill_disappear;}if(flag==1&&solider[i-1][j].service==''){solider[i-1][j]=solider[i][j];solider[i][j]=kill_disappear;}}}////////////////////////////////////如果为红军骑兵判断是否可以移动if(solider[i][j].service=='F'){flag=0;//初始化标志位for(iTmp=i;iTmp<=x_blue;iTmp++)//判断在i上是否已经没有人,没有则不进行前进开始作右移动{if(solider[iTmp][j].red_blue==1){flag=1;break;}}if(solider[i+1][j].service==''&&solider[i+2][j].service==''&& solider[i+3][j].service==''&&1==flag)//正前方仍有人,继续前进{solider[i+3][j]=solider[i][j];solider[i][j]=kill_disappear;}if(solider[i+1][j].service==''&&solider[i+2][j].service==''&& 1==flag){solider[i+2][j]=solider[i][j];solider[i][j]=kill_disappear;}if(solider[i+1][j].service==''&&1==flag){solider[i+1][j]=solider[i][j];solider[i][j]=kill_disappear;}if(0==flag&&j<28&&solider[i][j+1].service==''&& solider[i][j+2].service==''&&solider[i][j+3].service=='')//j<30的骑士向中间移动{solider[i][j+3]=solider[i][j];solider[i][j]=kill_disappear;}if(0==flag&&j<29&&solider[i][j+1].service==''&& solider[i][j+2].service==''){solider[i][j+2]=solider[i][j];solider[i][j]=kill_disappear;}if(0==flag&&j<30&&solider[i][j+1].service==''){solider[i][j+1]=solider[i][j];solider[i][j]=kill_disappear;}if(random()%NUM==0){if(flag==1&&solider[i][j+1].service==''){solider[i][j+1]=solider[i][j];solider[i][j]=kill_disappear;}if(flag==1&&solider[i+1][j].service==''){solider[i+1][j]=solider[i][j];solider[i][j]=kill_disappear;}}if(random()%NUM==0){if(flag==1&&solider[i][j-1].service==''){solider[i][j-1]=solider[i][j];solider[i][j]=kill_disappear;}if(flag==1&&solider[i-1][j].service==''){solider[i-1][j]=solider[i][j];solider[i][j]=kill_disappear;}}///////////////////////////////////////}}}for(j=30;j<60;j++){if(solider[i][j].red_blue==0){if(solider[i][j].service=='G'||solider[i][j].service=='A')//如果为红军-弓箭手-或-步兵-判断是否可以移动{flag=0;for(iTmp=i;iTmp<=x_blue;iTmp++)//判断在i上是否已经没有人,没有则不进行前进开始左右移动{if(solider[iTmp][j].red_blue==1){flag=1;break;}}if(solider[i+1][j].service==''&&1==flag)//正前方仍有人,继续前进{solider[i+1][j]=solider[i][j];solider[i][j]=kill_disappear;}if(flag==0&&j>30&&solider[i][j-1].service=='')//正前方没有人,j>30,则选择靠近j=30的方向移动{solider[i][j-1]=solider[i][j];solider[i][j]=kill_disappear;}if(random()%NUM==0){if(flag==1&&solider[i][j+1].service==''){solider[i][j+1]=solider[i][j];solider[i][j]=kill_disappear;}if(flag==1&&solider[i+1][j].service==''){solider[i+1][j]=solider[i][j];solider[i][j]=kill_disappear;}}if(random()%NUM==0){if(flag==1&&solider[i][j-1].service==''){solider[i][j-1]=solider[i][j];solider[i][j]=kill_disappear;}if(flag==1&&solider[i-1][j].service==''){solider[i-1][j]=solider[i][j];solider[i][j]=kill_disappear;}}if(random()%NUM==0){if(flag==1&&solider[i][j-1].service==''){solider[i][j-1]=solider[i][j];solider[i][j]=kill_disappear;}if(flag==1&&solider[i-1][j].service==''){solider[i-1][j]=solider[i][j];solider[i][j]=kill_disappear;}}}////////////////////////////////////如果为红军骑兵判断是否可以移动if(solider[i][j].service=='F'){flag=0;//初始化标志位for(iTmp=i;iTmp<=x_blue;iTmp++)//判断在i上是否已经没有人,没有则不进行前进开始作右移动{if(solider[iTmp][j].red_blue==1){flag=1;break;}}if(solider[i+1][j].service==''&&solider[i+2][j].service==''&& solider[i+3][j].service==''&&1==flag)//正前方仍有人,继续前进{solider[i+3][j]=solider[i][j];solider[i][j]=kill_disappear;}if(solider[i+1][j].service==''&&solider[i+2][j].service==''&& 1==flag){solider[i+2][j]=solider[i][j];solider[i][j]=kill_disappear;}if(solider[i+1][j].service==''&&1==flag){solider[i+1][j]=solider[i][j];solider[i][j]=kill_disappear;}if(0==flag&&j>32&&solider[i][j-1].service==''&& solider[i][j-2].service==''&&solider[i][j-3].service=='')//j>30的骑士向中间移动{solider[i][j-3]=solider[i][j];solider[i][j]=kill_disappear;}if(0==flag&&j>31&&solider[i][j-1].service==''&& solider[i][j-2].service==''){solider[i][j-2]=solider[i][j];solider[i][j]=kill_disappear;}if(0==flag&&j>30&&solider[i][j-1].service==''){solider[i][j-1]=solider[i][j];solider[i][j]=kill_disappear;}if(random()%NUM==0){if(flag==1&&solider[i][j+1].service==''){solider[i][j+1]=solider[i][j];solider[i][j]=kill_disappear;}if(flag==1&&solider[i+1][j].service==''){solider[i+1][j]=solider[i][j];solider[i][j]=kill_disappear;}}if(random()%NUM==0){if(flag==1&&solider[i][j-1].service==''){solider[i][j-1]=solider[i][j];solider[i][j]=kill_disappear;}if(flag==1&&solider[i-1][j].service==''){solider[i-1][j]=solider[i][j];solider[i][j]=kill_disappear;}}///////////////////////////////////////}}}}}////////////////////////////////////////////////////实时战斗画面显示函数/////////////////////////////////////////void realtime_print(void){int i,j;sleep(1);printf("\t*******************************************************************\ n");for(i=0;i<60;i++)//x_red,x_blue界定地图范围{printf("\t%5dH\t\t\t",i);for(j=0;j<60;j++){if(solider[i][j].red_blue==0){printf("\033[31m%c\033[0m",solider[i][j].service);//红军打印红色}if(solider[i][j].red_blue==1){printf("\033[34m%c\033[0m",solider[i][j].service);//蓝军打印蓝色}if(solider[i][j].red_blue==3){printf("%c",solider[i][j].service);//没人}}printf("\n");}printf("\t*******************************************************************\ n");}/////////////////////////////////////////////////////选择战斗模式函数//////////////////////////////////////////////void select_war_mode(void){int controlmode=0;//战斗控制模式---自动或手动进行战斗printf("战斗即将开始!!清选择自动模式或手动模式:1--自动模式2--手动模式\n");//选择战斗进攻方式(自动和手动)scanf("%d",&controlmode);while(controlmode!=1&&controlmode!=2){printf("战斗即将开始!!清选择自动模式或手动模式:1--自动模式2--手动模式\n");scanf("%d",&controlmode);}printf("*************************初始化战斗场面**************************************\n");realtime_print();int i,j;int tmpredTotal,tmpblueTotal;//记录开始总人数int flag;tmpredTotal=redTotal;tmpblueTotal=blueTotal;if(random()%2==0){flag=-1;}else{flag=1;}if(controlmode==1){realtime_print();while(1){redTotal=0;blueTotal=0;move_attack();if(flag==-1)//红军先打蓝军后打{for(i=x_blue;i>=x_red;i--){for(j=0;j<60;j++){if(solider[i][j].red_blue==0)search_attack(i,j);}}for(i=x_red;i<=x_blue;i++){for(j=0;j<60;j++){if(solider[i][j].red_blue==1)search_attack(i,j);}}for(i=x_red;i<=x_blue;i++){for(j=0;j<60;j++){if(solider[i][j].red_blue==0)redTotal++;if(solider[i][j].red_blue==1)blueTotal++;}}}if(flag==1)//蓝军先打红军后打{for(i=x_red;i<=x_blue;i++){for(j=0;j<60;j++){if(solider[i][j].red_blue==1)search_attack(i,j);}}for(i=x_blue;i>=x_red;i--){for(j=0;j<60;j++){if(solider[i][j].red_blue==0)search_attack(i,j);}}for(i=x_red;i<=x_blue;i++){for(j=0;j<60;j++){if(solider[i][j].red_blue==0)redTotal++;if(solider[i][j].red_blue==1)blueTotal++;}}}realtime_print();printf("红军回合,过后蓝军尚存活%d人\n",blueTotal);printf("蓝军回合,过后红军尚存活%d人\n",redTotal);flag=-flag;sleep(1);if(redTotal==0||blueTotal==0)break;}if(redTotal!=0){printf("红军获得胜利,存活%d人,阵亡%d人!\n",redTotal,tmpredTotal-redTotal);}if(blueTotal!=0){printf("蓝军获得胜利,存活%d人,阵亡%d 人!\n",blueTotal,tmpblueTotal-blueTotal);}printf("总共发生%d次攻击,发生%d次暴击!\n",attackNum,critical);//战斗结束,选擇是否要继续//int restar;printf("是否繼續游戏:1--繼續;0--退出\n请输入:");scanf("%d",&restar);while(restar!=0&&restar!=1){printf("输入错误,请重新输入:");scanf("%d",&restar);}if(restar==0)exit(1);else{array_init();//双方军队阵型-数组-初始化函数,定义地图范围并全部为空格warfare_set();//战争模式设定select_war_mode();//调用战斗模式函数}}if(controlmode==2){realtime_print();while(getchar()=='\n'){redTotal=0;blueTotal=0;move_attack();if(flag==-1)//红军先打蓝军后打{for(i=x_blue;i>=x_red;i--){for(j=0;j<60;j++){if(solider[i][j].red_blue==0)search_attack(i,j);}}for(i=x_red;i<=x_blue;i++){for(j=0;j<60;j++){if(solider[i][j].red_blue==1)search_attack(i,j);}}for(i=x_red;i<=x_blue;i++){for(j=0;j<60;j++){if(solider[i][j].red_blue==0)redTotal++;if(solider[i][j].red_blue==1)blueTotal++;}}}if(flag==1)//蓝军先打红军后打{for(i=x_red;i<=x_blue;i++){for(j=0;j<60;j++){if(solider[i][j].red_blue==1)search_attack(i,j);}}for(i=x_blue;i>=x_red;i--){for(j=0;j<60;j++){if(solider[i][j].red_blue==0)search_attack(i,j);}}for(i=x_red;i<=x_blue;i++){for(j=0;j<60;j++){if(solider[i][j].red_blue==0)redTotal++;if(solider[i][j].red_blue==1)blueTotal++;}}}realtime_print();printf("红军回合,过后蓝军尚存活%d人\n",blueTotal);printf("蓝军回合,过后红军尚存活%d人\n",redTotal);flag=-flag;sleep(1);if(redTotal==0||blueTotal==0)break;}if(redTotal!=0){printf("红军获得胜利,存活%d人,阵亡%d人!\n",redTotal,tmpredTotal-redTotal);}if(blueTotal!=0){printf("蓝军获得胜利,存活%d人,阵亡%d 人!\n",blueTotal,tmpblueTotal-blueTotal);}printf("总共发生%d次攻击,发生%d次暴击\n",attackNum,critical);//战斗结束,选擇是否要继续//int restar;printf("是否繼續游戏:1--繼續;0--退出\n请输入:");scanf("%d",&restar);while(restar!=0&&restar!=1){printf("输入错误,请重新输入:");scanf("%d",&restar);}if(restar==0)exit(1);else{array_init();//双方军队阵型-数组-初始化函数,定义地图范围并全部为空格warfare_set();//战争模式设定select_war_mode();//调用战斗模式函数}}}/////////////////////////////////////////////////////人数模式设置函数//////////////////////////////////////////////void select_people_mode(void){int inputhead=0;//每次输入人数int allinput=0;//总共輸入人数int surhead=1000;//剩余总人数int soldtype=0;//兵种类型int rednumG=0;//红军弓箭手人数int rednumQ=0;//红军步兵人数int rednumB=0;//红军骑兵人数////////////////////////////////////红军兵力配置/////////////////////////////////////printf("******************双方均可設置1000人的兵力***********************\n");printf("红军設置兵力阶段Start!\n");printf("总共-%d-人可配置\n",surhead=1000-allinput);printf("请选择需配置的兵种类型:1--弓箭手2--步兵3--骑士\n");printf("请输入兵种:");scanf("%d",&soldtype);while(soldtype!=1&&soldtype!=2&&soldtype!=3){printf("\n輸入错误,请重新选择兵种\n");printf("\n还剩余-%d-人可配置\n",surhead=1000-allinput);printf("请选择需配置的兵种类型:1--弓箭手2--步兵3--骑士\n");printf("请输入兵种:");scanf("%d",&soldtype);}do{printf("请輸入该兵种人数:");scanf("%d",&inputhead);while(inputhead>surhead||inputhead<0)//如果大于剩于人数或着小于零重新輸入{printf("输入人数超出范围,请重新輸入人数:");scanf("%d",&inputhead);}allinput+=inputhead;//统计目前输入总人数防止超过总数目surhead=1000-allinput;//统计目前剩余总人数switch(soldtype)//红军把各兵种及数目顺次存放到数组中{case1:{rednumG+=inputhead;array_add(0,soldtype,inputhead);}break;case2:{rednumB+=inputhead;array_add(0,soldtype,inputhead);}break;case3:{rednumQ+=inputhead;array_add(0,soldtype,inputhead);}break;default:break;}if(surhead>0){printf("\n还剩余-%d-人可配置\n",surhead);printf("请选择需配置的兵种类型:1--弓箭手2--步兵3--骑士\n");printf("请输入兵种:");scanf("%d",&soldtype);while(soldtype!=1&&soldtype!=2&&soldtype!=3){printf("\n輸入错误,请重新选择兵种\n");printf("还剩余-%d-人可配置\n",surhead);printf("请选择需配置的兵种类型:1--弓箭手2--步兵3--骑士\n");printf("请输入兵种:");scanf("%d",&soldtype);}}}while(surhead>0);printf("红军人员配置完毕!!\n\n\n");//////////////////////////////////////蓝军兵力配置/////////////////////////////////////int bluenumG=0;//红军弓箭手人数int bluenumB=0;//红军步兵人数int bluenumQ=0;//红军骑兵人数allinput=0;//輸入总人数初始化为0surhead=1000;//剩余总人数初始化为1000soldtype=0;//兵种类型初始化为0inputhead=0;//每次输入不同兵种的人数初始化为0printf("蓝军設置兵力阶段Start!\n");printf("总共剩余可配置人数为%d人\n",surhead=1000-allinput);printf("请选择需配置的兵种类型:1--弓箭手2--步兵3--骑士\n");printf("请输入兵种:");scanf("%d",&soldtype);while(soldtype!=1&&soldtype!=2&&soldtype!=3){printf("\n輸入错误,请重新选择兵种:");printf("\n还剩余-%d-人可配置\n",surhead=1000-allinput);printf("请选择需配置的兵种类型:1--弓箭手2--步兵3--骑士\n");printf("请输入兵种:");scanf("%d",&soldtype);}do{printf("请輸入该兵种人数:");scanf("%d",&inputhead);while(inputhead>surhead)//输入人数超出范围重新输入{printf("输入人数超出范围,请重新輸入人数:");scanf("%d",&inputhead);}allinput+=inputhead;//统计目前输入总人数surhead=1000-allinput;//剩余总人数switch(soldtype)//红军把各兵种及数目顺次存放到数组中,函数调用参数为(蓝军代号1,兵种){case1:{bluenumG+=inputhead;array_add(1,soldtype,inputhead);}break;case2:{bluenumB+=inputhead;array_add(1,soldtype,inputhead);}break;case3:{bluenumQ+=inputhead;array_add(1,soldtype,inputhead);}break;default:break;}if(surhead>0){printf("\n还剩余-%d-人可配置\n",surhead=1000-allinput);printf("请选择需配置的兵种类型:1--弓箭手2--步兵3--骑士\n");printf("请输入兵种:");scanf("%d",&soldtype);while(soldtype!=1&&soldtype!=2&&soldtype!=3){printf("\n輸入错误,请重新选择兵种\n");printf("还剩余-%d-人可配置\n",surhead=1000-allinput);printf("请选择需配置的兵种类型:1--弓箭手2--步兵3--骑士\n");printf("请输入兵种:");scanf("%d",&soldtype);}}}while(surhead>0);printf("蓝军人员配置完毕!!\n\n\n");//红蓝双方人员分配总情况printf("红军人员配置:弓箭手人数--%d\t步兵人数--%d\t骑士人数--%d\n",rednumG,rednumB,rednumQ);printf("蓝军人员配置:弓箭手人数--%d\t步兵人数--%d\t骑士人数--%d\n\n",bluenumG,bluenumB,bluenumQ);realtime_print();}///////////////////////////////////////////////////金钱模式设置函数/////////////////////////////////////////////////////// void select_money_mode(void){int choice=0;//选择自设置总金额或系统模人金额数int soldtype=0;//兵种类型int num=0;//每次输入的人数int redmoney;//红军拥有的总金额int rednumG=0;//红军弓箭手人数int rednumB=0;//红军步兵人数int rednumQ=0;//红军骑兵人数int redtotal=0;//红军总人数int bluemoney;//蓝军拥有的总金额int bluenumG=0;//蓝军弓箭手人数int bluenumB=0;//蓝军步兵人数int bluenumQ=0;//蓝军骑兵人数int bluetotal=0;//蓝军总人数printf("请选择双方拥有的金钱方式:1--自由设置2--计算机分配(默认100000)\n");while(1){printf("输入拥有金额方式:");scanf("%d",&choice);if(choice==2)。

C语言飞机大战源码

C语言飞机大战源码

C语言飞机大战源码以下是一个简单的C语言飞机大战游戏的源码,包括了基本的界面、移动控制、碰撞检测和计分等功能。

```c#include <stdio.h>#include <conio.h>#include <windows.h>#define SCREEN_WIDTH 80#define SCREEN_HEIGHT 25int shipX, shipY;int bulletX, bulletY;int enemyX, enemyY;int score;void SetCursorPosition(int x, int y)COORD position = {x, y};SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), position);void HideCursoCONSOLE_CURSOR_INFO cursor_info = {1, 0};SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);void DrawShiSetCursorPosition(shipX, shipY);printf("▲");void DrawBulleSetCursorPosition(bulletX, bulletY);printf(",");void DrawEnemSetCursorPosition(enemyX, enemyY);printf("■");void EraseBulleSetCursorPosition(bulletX, bulletY);printf(" ");void EraseEnemSetCursorPosition(enemyX, enemyY);printf(" ");void GameOvesystem("cls");printf("Game Over!\n");printf("Your score is: %d\n", score); exit(0);void UpdateScorSetCursorPosition(SCREEN_WIDTH - 10, 0); printf("Score: %d", score);void MoveShiif (_kbhit()switch (_getch()case 'a':if (shipX > 0) shipX--;break;case 'd':if (shipX < SCREEN_WIDTH - 1) shipX++; break;case ' ':bulletX = shipX;bulletY = shipY - 1;break;case 'q':GameOver(;break;}}void MoveBulleif (bulletY > 0)EraseBullet(;bulletY--;DrawBullet(;}elseEraseBullet(;bulletX = -1;bulletY = -1;}void MoveEnemif (enemyY < SCREEN_HEIGHT - 1) EraseEnemy(;enemyY++;DrawEnemy(;}elseEraseEnemy(;enemyX = rand( % SCREEN_WIDTH;enemyY = 0;score++;UpdateScore(;}void CheckCollisioif (bulletX == enemyX && bulletY == enemyY) EraseBullet(;bulletX = -1;bulletY = -1;enemyX = rand( % SCREEN_WIDTH;enemyY = 0;score++;UpdateScore(;}else if ((bulletX == enemyX - 1 , bulletX == enemyX ,bulletX == enemyX + 1) && bulletY == enemyY)EraseBullet(;bulletX = -1;bulletY = -1;enemyX = rand( % SCREEN_WIDTH;enemyY = 0;score++;UpdateScore(;}else if (bulletY == enemyY && (bulletX == enemyX - 1 ,bulletX == enemyX , bulletX == enemyX + 1))EraseBullet(;bulletX = -1;bulletY = -1;enemyX = rand( % SCREEN_WIDTH;enemyY = 0;score++;UpdateScore(;}else if (bulletX == enemyX && bulletY == enemyY + 1) EraseBullet(;bulletX = -1;bulletY = -1;enemyX = rand( % SCREEN_WIDTH;enemyY = 0;score++;UpdateScore(;}else if (bulletX == shipX && bulletY == shipY) GameOver(;}int maiHideCursor(;shipX = SCREEN_WIDTH / 2;shipY = SCREEN_HEIGHT - 1;bulletX = -1;bulletY = -1;enemyX = rand( % SCREEN_WIDTH; enemyY = 0;score = 0;while (1)DrawShip(;if (bulletX != -1 && bulletY != -1) MoveBullet(;}elseEraseBullet(;}MoveShip(;MoveEnemy(;CheckCollision(;Sleep(50);}return 0;```这个源码实现了一个控制飞机射击敌人并计分的简单游戏。

c语言数独游戏程序(ClanguageSudokuprogram)

c语言数独游戏程序(ClanguageSudokuprogram)

c语言数独游戏程序(C language Sudoku program)/ * **数独程序* /公共类的蜀都{/ * * /存储数字的数组静态int [] = n =新int [ 9 ] [] 9 ];/ * * /生成随机数字的源数组,随机数字从该数组中产生static int [] num = { 1,2,3,4,5,6,7,8,9 };public static void main(String [] args){/ /生成数字对于(int = i 0;i < 9;i + +){/ /尝试填充的数字次数int时间= 0;/ /填充数字对于(int = 0;j<9;j + +){/ /产生数字n [我] [ J ] = generatenum(时间);/ /如果返回值为0,则代表卡住,退回处理/ /退回处理的原则是:如果不是第一列,则先倒退到前一列,否则倒退到前一行的最后一列如果(n i = j = 0){/ /不是第一列,则倒退一列如果(j = 0){J=2;继续;}否则{ //是第一列,则倒退到上一行的最后一列我--;j=8;继续;}}/ /填充成功如果(iscorret(i,j)){/ /初始化时间,为下一次填充做准备时间= 0;} { //继续填充其他次数增加/ / 1时间+;/ /继续填充当前格J;}}}/ /输出结果对于(int = i 0;i < 9;i + +){ 对于(int = 0;j<9;j + +){系统。

输出;}系统println()。

出去;}}/ * **是否满足行、列和3x3区域不重复的要求* @param排行号* @param Col列号* @还真代表符合要求* /公共静态布尔iscorret(行,int型){返回(检验行(列)与这种(COL)和checknine(行,列));}/ * **检查行是否符合要求* @param排检查的行号* @还真代表符合要求* /公共静态布尔检验行(行){对于(int = 0;j<8;j + +){如果(n行= j = 0){继续;}for (int k = j + 1, k < 9; k + +) { if (n [row] [j] = = n [row] [k]) { return false;}}}return true;}/ * ** 检查列是否符合要求* @ param col 检查的列号* @ return true代表符合要求* /public static boolean checkline (int col) { for (int j = 0 and j < 8; j + +) {if (n [j] [col] = = 0) {continue;}for (int k = j + 1, k < 9; k + +) {if (n [j] [col] = = n [c] [col]) {return false;}}return true;}/ * ** 检查3x3区域是否符合要求* @ param row 检查的行号* @ param col 检查的列号* @ return true代表符合要求* /public static boolean checknine (int row, int col) { / / 获得左上角的坐标int j = row / 3 * 3;int c = col / 3 * 3;/ / 循环比较for (int i = 0; i < 8; i + +) {if (n [j + i / 3] [k + in% 3] = = 0) {continue;}for (int m = i + 1; m < 9; m + +) {if (n [j + i / 3] [k +] in% 3 = = n [j + m / 3] [k + m% 3]) {return false;}}}return true;}/ * ** 产生1 - 9之间的随机数字* 规则: 生成的随机数字放置在数组8 - time下标的位置, 随着time的增加, 已经尝试过的数字将不会在取到* 说明: 即第一次次是从所有数字中随机, 第二次时从前八个数字中随机, 依次类推,* 这样既保证随机, 也不会再重复取已经不符合要求的数字, 提高程序的效率* 这个规则是本算法的核心* @ param time 填充的次数, 0代表第一次填充* @ return* /public static int generatenum (int a) {/ / 第一次尝试时, 初始化随机数字源数组if (a = = 0) {for (int i = 0; i < 9; i + +) {num [in] = in + 1;}}/ / 第10次填充, 表明该位置已经卡住, 则返回0, 由主程序处理退回if (a = = 9) {return 0;}/ / 不是第一次填充/ / 生成随机数字, 该数字是数组的下标,The number corresponding to the subscript in the array num is a random numberInt ranNum = (int) (Math.random () * (9 - time));/ / put the numbers placed in the penultimate position of a time array,Int temp = num[8 - time];Num[8 - time] = num[ranNum];Num[ranNum] = temp;/ / return the numberReturn num[8 - time];}}。

C语言实现的打擂台算法的示例

C语言实现的打擂台算法的示例
以下是一个使用 C 语言实现的打擂台算法的示例:
c 复制代码
#include <stdio.h>
// 定义一个函数指针类型 typedef int (*ComparisonFunc)(int, int);
// 比较函数,用于比较两个整数的大小 int compare(int a, int b) {
if (a < b) { return -1;
// 调用打擂台函数,并传入比较函数和数组 int result = champion(compare, arr, size);
printf("冠军是:%d\n", result);
return 0;
}
这个示例中,我们定义了一个比较函数 compare ,用于比较两个整数的大小。然后,我们定 义了一个打擂台函数 champion ,它接受一个比较函数和一个整数数组作为参数,通过遍历 数组找到最大的元素作为冠军。最后,在 main 函数中调用打擂台函数,并输出冠军的值。 请注意,这只是一个简单的示例,你可以根据实际需求进行修改和扩展。
} else if (a > b) { return 1;} else { 来自eturn 0;} }
// 打擂台函数,接受一个比较函数和一个整数数组作为参数 int champion(ComparisonFunc compareFunc, int arr[], int size) {
int champ = arr[0]; // 初始化冠军为数组的第一个元素
for (int i = 1; i < size; i++) { if (compareFunc(arr[i], champ) > 0) { champ = arr[i]; // 如果当前元素比冠军大,则更新冠军 }

C语言简单格斗游戏程序

C语言简单格斗游戏程序
//奇数-八神先,偶数-草稚京先
randNum = rand();
if (randNum % 2 == 1)(int)(5 + 10 * rand() / (RAND_MAX + 1.0));//RANG_MAX:随机数的最大值
attack2 = (int)(5 + 10 * rand() / (RAND_MAX + 1.0));
int attack2 = 0;//草稚京的攻击力
int randNum;//用来存放玩家攻击先后的随机数变量
srand(time(NULL));
while (hp1 > 0 && hp2 > 0)//当双方都生存的时候,继续战斗过程
{
//1.模拟玩家出招:可以采用随机数是奇数/偶术的方式来决定谁先进行攻击
C
#include<iostream>
#include<cstdlib>
#include<ctime>
using namespace std;
int main()
{
//使用循环模拟拳皇对战
/**八神庵的HP */
int hp1 = 100;
int hp2 = 100;
int attack1 = 0;//八神的攻击力
hp2 -= attack1;//互相掉血
hp1 -= attack2;
}
else//偶数
{
attack2 = (int)(5 + 10 * rand() / (RAND_MAX + 1.0));//RANG_MAX:随机数的最大值
attack1 = (int)(5 + 10 * rand() / (RAND_MAX + 1.0));

一担挑游戏——C语言

一担挑游戏——C语言
模拟人机对弈---“一担挑游戏”
【要求】
简单设计计算机模拟棋盘对弈。其中棋盘左上角坐标为(1,1),右下角坐标为(3,3)。游戏规则如下:
(1)计算机移动时,使用相应函数扫描棋盘矩阵,寻找未占单元:发现空单元后,置为“O”,未发现时,报告平局后退出。
(2)轮到对弈者时,使用相应函数要求对弈者回答想把“X”放在哪里。
do
{
display();/*显示棋盘*/
player_move();/*人移动棋子*/
result=judge();/*调用判断胜负函数,并将结果赋予变量result*/
if(result!=' ')/*当变量result不为空时*/
break;/*跳出*/
computer_move();/*计算机移动棋子*/
(3)谁先三点一线了,则报告谁胜出。
(4)计算机与对弈者每下一步棋都会使用相应位置变为“O”和“X”,便于在屏上显示矩阵。
【提ห้องสมุดไป่ตู้】
棋盘位置用二维数组表示,初始状态每一位置均应为“ ”(空)。其分隔线(即棋盘线)可用——或| |来分隔。
【分析】
该程序模拟人机对弈,具有极大的趣味性。
全程序主要模块包括“人移动棋子模块”,“计算机移动棋子模块”以及“判断胜负模块”。“移动棋子模块”模块的难点在于判断人或计算机在棋盘上选择的位置是否合法(包括选择的位置在不在棋盘上及所选择的位置是否为空),“判断胜负模块”的难点在于判断八个“三点一线”内容是否一致,及判断平局。
if(t!=2)
printf("\n-|-|-\n");
}
printf("\n");
}
char judge(void)/*判断胜负*/
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档