C语言代码越障碍游戏(c语言猜拳游戏简单代码)
admin 发布:2022-12-19 17:07 136
今天给各位分享C语言代码越障碍游戏的知识,其中也会对c语言猜拳游戏简单代码进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
c语言设计游戏时怎么设计障碍物在空中来回移动
includelt;stdio.h;
void move(char x,char y)
{
printf(%c--;%c;n,x,y);
}
void hanoi(int n,char one ,char two,char three)
{
if(n==1) move(one,three);
else
{
hanoi(n-1,one,three,two);
move(one,three);
hanoi(n-1,two,one,three);
}
}
main()
{
int m;
printf(input the number of disks:);
scanf(%d,m);
printf(the step to moving %3d diskes:;n,m);
hanoi(m,;A;,;B;,;C;);
}
算法介绍:
其实算法非常简单,当盘子的个数为n时,移动的次数应等于2^n – 1(有兴趣的可以自己证明试试看)。后来一位美国学者发现一种出人意料的简单方法,只要轮流进行两步操作就可以了。首先把三根柱子按顺序排成品字型,把所有的圆盘按从大到小的顺序放在柱子A上,根据圆盘的数量确定柱子的排放顺序:若n为偶数,按顺时针方向依次摆放 A B C;
若n为奇数,按顺时针方向依次摆放 A C B。
(1)按顺时针方向把圆盘1从现在的柱子移动到下一根柱子,即当n为偶数时,若圆盘1在柱子A,则把它移动到B;若圆盘1在柱子B,则把它移动到C;若圆盘1在柱子C,则把它移动到A。
(2)接着,把另外两根柱子上可以移动的圆盘移动到新的柱子上。即把非空柱子上的圆盘移动到空柱子上,当两根柱子都非空时,移动较小的圆盘。这一步没有明确规定移动哪个圆盘,你可能以为会有多种可能性,其实不然,可实施的行动是唯一的。
(3)反复进行(1)(2)操作,最后就能按规定完成汉诺塔的移动。
所以结果非常简单,就是按照移动规则向一个方向移动金片:
如3阶汉诺塔的移动:A→C,A→B,C→B,A→C,B→A,B→C,A→C
汉诺塔问题也是程序设计中的经典递归问题,下面我们将给出递归和非递归的不同实现源代码。
c语言游戏编程,下落的小鸟 求代码
下落的小鸟
#includestdio.h
#includestdlib.h
#includeconio.h
#includetime.h
#includeWindows.h
int Grade = 1, Score = 0, Max_blank = 9, Distance = 18;
struct Birds{int x; int y;}; //定义一种Birds数据类型(含3个成员)
Birds *Bird = (Birds*)malloc(sizeof(Birds)); //定义Birds类型 指针变量Bird并赋初值
struct Bg{int x, y; int l_blank; Bg *pri; Bg *next;}; //定义一种Bg数据类型(含5个成员)
Bg *Bg1 = (Bg*)malloc(sizeof(Bg)); //定义Bg类型 指针变量Bg1并赋初值
void Position(int x, int y) //光标定位函数(用于指定位置输出)
{COORD pos = { x - 1, y - 1 };
HANDLE Out = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(Out, pos);
}
void Csh( ) //初始化界面
{
printf("══════════════════════════════════════\n");
printf(" ■■ ■■ C语言版 Flappy Bird \n");
printf(" ■■ ■■\n");
printf(" ■■ ■■\n");
printf(" ■■ ■■ 瞎搞人:yyposs原创\n");
printf(" ■■ ■■ 瞎搞日期:2014.2\n");
printf(" ■■ ■■\n");
printf(" ■■ ■■ 改编:鸣蝉百2021.7\n");
printf(" ■■ ■■ 操作:按向上方向键让小鸟起飞\n");
printf(" ■■\n");
printf(" ■■\n");
printf(" ■■ ■■\n");
printf(" ■■ ■■\n");
printf(" ■■ ■■\n");
printf(" ■■ ■■\n");
printf(" ■■ ■■ DEVc++运行通过\n");
printf("══════════════════════════════════════\n");
printf(" 按键继续…");
getch( );
system("cls");
}
void PrFK( ) //输出方框(游戏范围区)
{int i;
Position(1, 1); printf("╔"); Position(79, 1); printf("╗");
Position(1, 24); printf("╚"); Position(79, 24); printf("╝");
for (i = 3; i = 78; i += 2){Position(i, 1); printf("═"); Position(i, 24); printf("═");}
for(i=2;i=23;i++)
{ Position(1,i); printf("║");if(i11)printf("0%d",i-1);else printf("%d",i-1);
Position(79,i); printf("║");
}
Position(4, 25); printf("小鸟即将出现,请准备按键起飞… ");
getch( );
Position(4, 25); printf(" ");
}
void CreatBg( ) //创建障碍物坐标(便于打印输出)
{Bg *Bg2 = (Bg*)malloc(sizeof(Bg));
Bg1-x = 90; Bg1-y = 8; //确定障碍物的一对基本坐标(此时值是在游戏框之外)
Bg2-x = Bg1-x + Distance; Bg2-y = 9; //下一障碍物的基本坐标x、y
Bg1-l_blank = Max_blank - Grade; //障碍物上下两部分之间的空白距离l_blank
Bg2-l_blank = Max_blank - Grade;
Bg1-next = Bg2; Bg1-pri = Bg2;
Bg2-next = Bg1; Bg2-pri = Bg1;
}
void InsertBg(Bg *p) //随机改变障碍物的y坐标,让空白通道有上下变化
{int temp;
Bg *Bgs = (Bg*)malloc(sizeof(Bg));
Bgs-x = p-pri-x + Distance;
Bgs-l_blank = Max_blank - Grade;
srand((int)time(0)); //启动随机数发生器
temp = rand( ); //产生一个随机数并赋值给temp
if (temp % 2 == 0)
{if ((temp % 4 + p-pri-y + Max_blank - Grade)21)
Bgs-y = p-pri-y + temp % 4;
else Bgs-y = p-pri-y;
}
else
{if ((p-pri-y - temp % 4)2)Bgs-y = p-pri-y - temp % 4;
else Bgs-y = p-pri-y;
}
Bgs-pri = p-pri; Bgs-next = p;
p-pri-next = Bgs; p-pri = Bgs;
}
void CreatBird( ) //建立小鸟的坐标(初始打印输出小鸟的位置)
{Bird-x = 41; Bird-y = 10;}
int CheckYN(Bg *q) //判断游戏结束与否(值为0是要结束,为1没有要结束)
{Bg *p = q; int i = 0;
while (++i = 5)
{if (Bird-y23)return 0;
if (Bird-x == p-xBird-y = p-y)return 0;
if ((Bird-x == p-x || Bird-x == p-x + 1 || Bird-x == p-x + 2) Bird-y == p-y)return 0;
if (Bird-x == p-xBird-yp-y + p-l_blank)return 0;
if ((Bird-x == p-x || Bird-x == p-x + 1 || Bird-x == p-x + 2) Bird-y == p-y + p-l_blank)
return 0;
p = p-next;
}
return 1;
}
void Check_Bg(Bg *q) //核查开头的障碍物坐标是否在游戏区内
{Bg *p = q; int i = 0, temp;
while (++i = 5)
{if (p-x-4)p = p-next;
else
{srand((int)time(0)); temp = rand();
if (temp % 2 == 0)
{if ((temp % 4 + p-y + Max_blank - Grade)21)p-y = p-y + temp % 4;
else p-y = p-y; p-x = p-pri-x + Distance;
p-l_blank = Max_blank - Grade;
}
else
{if ((p-y - temp % 4)2)p-y = p-y - temp % 4;
else p-y = p-y; p-x = p-pri-x + Distance;
p-l_blank = Max_blank - Grade;
}
}
}
}
void Prt_Bg(Bg *q) //打印输出障碍物(依据其x、y坐标进行相应输出)
{Bg *p = q; int i = 0, k, j;
while (++i = 5)
{if (p-x0 p-x = 78)
{for (k = 2; kp-y; k++){Position(p-x + 1, k); printf("■"); printf("■"); printf(" ");}
Position(p-x, p-y);
printf("■"); printf("■"); printf("■"); printf(" ");
Position(p-x, p-y + p-l_blank);
printf("■"); printf("■"); printf("■"); printf(" ");
k = k + p-l_blank + 1;
for (k; k = 23; k++){Position(p-x + 1, k); printf("■"); printf("■"); printf(" ");}
}
p = p-next;
if (p-x == 0)
{for (j = 2; jp-y; j++){Position(p-x + 1, j); printf(" "); printf(" ");}
Position(p-x + 1, p-y);
printf(" "); printf(" "); printf(" ");
Position(p-x + 1, p-y + Max_blank - Grade);
printf(" "); printf(" "); printf(" ");
j = j + Max_blank - Grade + 1;
for (j; j = 22; j++){Position(p-x + 1, j); printf(" "); printf(" ");}
}
}
}
void PrtBird( ) //打印输出小鸟
{Position(Bird-x, Bird-y - 1); printf(" ");
Position(Bird-x, Bird-y); printf("Ю");
Position(38, 2); printf("Score:%d", Score);
}
void Loop_Bg(Bg *q) //障碍物x坐标左移,并记录成绩
{Bg *p = q; int i = 0;
while (++i = 5)
{p-x = p-x - 1; p = p-next;
if (Bird-x == p-x)
{Score += 1;
if (Score % 4 == 0 Grade4)Grade++;
}
}
}
int main( )
{int i = 0; int t;
while (1)
{
Csh( );PrFK( );CreatBg( );
InsertBg(Bg1);InsertBg(Bg1);InsertBg(Bg1);
CreatBird( );
while (1)
{if (!CheckYN(Bg1))break;
Check_Bg(Bg1);Prt_Bg(Bg1);
PrtBird( );Loop_Bg(Bg1);
Bird-y = Bird-y + 1;
if (GetAsyncKeyState(VK_UP)) //按下了向上方向键
{Position(Bird-x, Bird-y - 1);printf(" ");
Bird-y = Bird-y - 4;
}
Sleep(200); //程序延时200毫秒(数值大小决定游戏速度快慢)
i = 0;
}
Position(6, 25);
printf("游戏结束! 请输入:0.退出 1.重玩");
scanf("%d",t);
if (t==0)break;
system("cls"); Score = 0;
}
return 0;
}
c语言 贪吃蛇 程序
基本思路:
蛇每吃一个食物蛇身子就增加一格,用UP, DOWN, LEFT, RIGHT控制蛇头的运动,而蛇身子跟着蛇头走,每后一格蛇身子下一步走到上一格蛇身子的位置,以此类推。
#include stdio.h
#include conio.h
#include windows.h
#define BEG_X 2
#define BEG_Y 1
#define WID 20
#define HEI 20
HANDLE hout;
typedef enum {UP, DOWN, LEFT, RIGHT} DIR;
typedef struct Snake_body
{
COORD pos;//蛇身的位置
struct Snake_body *next;//下一个蛇身
struct Snake_body *prev;//前一个蛇身
}SNAKE, *PSNAKE;
PSNAKE head = NULL;//蛇头
PSNAKE tail = NULL;//蛇尾
//画游戏边框的函数
void DrawBorder()
{
int i, j;
COORD pos = {BEG_X, BEG_Y};
for(i = 0; i HEI; ++i)
{
SetConsoleCursorPosition(hout, pos);
for(j = 0; j WID; ++j)
{
if(i == 0)//第一行
{
if(j == 0)
printf("┏");
else if(j == WID - 1)
printf("┓");
else
printf("━");
}
else if(i == HEI - 1)//最后一行
{
if(j == 0)
printf("┗");
else if(j == WID - 1)
printf("┛");
else
printf("━");
}
else if(j == 0 || j == WID - 1)//第一列或最后一列
printf("┃");
else
printf(" ");
}
++pos.Y;
}
}
//添加蛇身的函数
void AddBody(COORD pos)
{
PSNAKE pnew = (PSNAKE)calloc(1, sizeof(SNAKE));
pnew-pos = pos;
if(!head)
{
head = tail = pnew;
}
else
{
pnew-next = head;//新创建蛇身的next指向原先的蛇头
head-prev = pnew;//原先的蛇头的prev指向新创建的蛇身
head = pnew;//把新创建的蛇身作为新的蛇头
}
SetConsoleCursorPosition(hout, head-pos);
printf("◎");
}
//蛇身移动的函数
void MoveBody(DIR dir)
{
PSNAKE ptmp;
COORD pos = head-pos;
switch(dir)
{
case UP:
if(head-pos.Y BEG_Y + 1)
--pos.Y;
else
return;
break;
case DOWN:
if(head-pos.Y BEG_Y + HEI - 2)
++pos.Y;
else
return;
break;
case LEFT:
if(head-pos.X BEG_X + 2)
pos.X -= 2;
else
return;
break;
case RIGHT:
if(head-pos.X BEG_X + (WID - 2) * 2)
pos.X += 2;
else
return;
break;
}
AddBody(pos);//添加了一个新的蛇头
ptmp = tail;//保存当前的蛇尾
tail = tail-prev;
if(tail)
tail-next = NULL;
SetConsoleCursorPosition(hout, ptmp-pos);
printf(" ");
free(ptmp);
}
int main()
{
int ctrl;
DIR dir = RIGHT;//初始蛇的方向是向右的
COORD pos = {BEG_X + 2, BEG_Y + HEI / 2};
system("color 0E");
system("mode con cols=90 lines=30");
hout = GetStdHandle(STD_OUTPUT_HANDLE);
printf(" ------------贪吃蛇的移动------------");
DrawBorder();
//自定义几个蛇的身体
AddBody(pos);
pos.X += 2;
AddBody(pos);
pos.X += 2;
AddBody(pos);
pos.X += 2;
AddBody(pos);
pos.X += 2;
AddBody(pos);
pos.X += 2;
AddBody(pos);
pos.X += 2;
AddBody(pos);
//控制蛇的移动
while(ctrl = getch())
{
switch(ctrl)
{
case 'w':
if(dir == DOWN)
continue;
dir = UP;
break;
case 's':
if(dir == UP)
continue;
dir = DOWN;
break;
case 'a':
if(dir == RIGHT)
continue;
dir = LEFT;
break;
case 'd':
if(dir == LEFT)
continue;
dir = RIGHT;
break;
case 'q':
return 0;
}
MoveBody(dir);
}
return 0;
}
扩展资料:
实现逻辑
1,可以设置光标,就能实现制定位置打印制定符号。
2,涉及一个结构体,包含两个元素坐标元素和一个结构体指针。
3,结构体串联形成链表,遍历获取成员坐标,打印符号得到蛇身。
4,不断的加头,去尾,重新遍历坐标,再打印形成蛇的移动。
5,食物产生的位置判定,不能越界,也不能与蛇身体重合。
6,蛇的转向判定,一条规则,不允许倒退。
7,转向的实现,跟行进方向决定新的关节坐标(当前头的上下左右)
8,死亡检测,是否头节点坐标是否与墙壁重合,是否与身体其他关节重合。
9,加速减速,设置刷新休眠时间实现。
参考资料来源:百度百科-C语言
关于C语言代码越障碍游戏和c语言猜拳游戏简单代码的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
版权说明:如非注明,本站文章均为 AH站长 原创,转载请注明出处和附带本文链接;
- 上一篇:关于超市会员管理系统源代码的信息
- 下一篇:html消消乐的代码(消消乐编程代码)
相关推荐
- 04-29web课程设计源代码(网页设计与制作课程代码)[20240429更新]
- 04-29在哪输入代码可以出来表情(输入法表情代码)[20240429更新]
- 04-29进销存软件代码(进销存软件是什么软件)[20240429更新]
- 04-29评论发布代码(评论框代码)[20240429更新]
- 04-29班级管理系统jsp代码的简单介绍[20240429更新]
- 04-29代码高亮(代码高亮是什么意思)[20240429更新]
- 04-29jsp收费系统源代码的简单介绍[20240429更新]
- 04-29文字特效js代码(文字效果代码)[20240429更新]
- 04-29phpqq代码(免费代码)[20240429更新]
- 04-29css广告代码生成器(广告设计生成器)[20240429更新]
取消回复欢迎 你 发表评论:
- 标签列表
- 最近发表
- 友情链接