C++或者C可以写游戏脚本吗?
可以,但C++和C语言是易学难精的语言,编写脚本很容易出现bug和其他问题,但他的灵活性和简易性也不可忽略,而目前比较流行的脚本:Python、Lua、ruby和Erlang,具体可以看看这篇文章
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语言编程的汉诺塔游戏?
#include\x0d\x0a void move(char x,char y)\x0d\x0a {\x0d\x0a printf(“%c–%c\n”,x,y);\x0d\x0a }\x0d\x0a void hanoi(int n,char one ,char two,char three)\x0d\x0a {\x0d\x0a if(n==1) move(one,three);\x0d\x0a else\x0d\x0a {\x0d\x0a hanoi(n-1,one,three,two);\x0d\x0a move(one,three);\x0d\x0a hanoi(n-1,two,one,three);\x0d\x0a }\x0d\x0a }\x0d\x0a main()\x0d\x0a {\x0d\x0a int m;\x0d\x0a printf(“input the number of disks:”);\x0d\x0a scanf(“%d”,m);\x0d\x0a printf(“the step to moving %3d diskes:\n”,m);\x0d\x0a hanoi(m,’A’,’B’,’C’);\x0d\x0a }\x0d\x0a算法介绍:\x0d\x0a 其实算法非常简单,当盘子的个数为n时,移动的次数应等于2^n _ 1(有兴趣的可以自己证明试试看)。后来一位美国学者发现一种出人意料的简单方法,只要轮流进行两步操作就可以了。首先把三根柱子按顺序排成品字型,把所有的圆盘按从大到小的顺序放在柱子A上,根据圆盘的数量确定柱子的排放顺序:若n为偶数,按顺时针方向依次摆放 A B C;\x0d\x0a 若n为奇数,按顺时针方向依次摆放 A C B。\x0d\x0a (1)按顺时针方向把圆盘1从现在的柱子移动到下一根柱子,即当n为偶数时,若圆盘1在柱子A,则把它移动到B;若圆盘1在柱子B,则把它移动到C;若圆盘1在柱子C,则把它移动到A。\x0d\x0a (2)接着,把另外两根柱子上可以移动的圆盘移动到新的柱子上。即把非空柱子上的圆盘移动到空柱子上,当两根柱子都非空时,移动较小的圆盘。这一步没有明确规定移动哪个圆盘,你可能以为会有多种可能性,其实不然,可实施的行动是唯一的。\x0d\x0a (3)反复进行(1)(2)操作,最后就能按规定完成汉诺塔的移动。\x0d\x0a 所以结果非常简单,就是按照移动规则向一个方向移动金片:\x0d\x0a 如3阶汉诺塔的移动:A→C,A→B,C→B,A→C,B→A,B→C,A→C\x0d\x0a 汉诺塔问题也是程序设计中的经典递归问题,下面我们将给出递归和非递归的不同实现源代码。
C语言编写三局两胜的猜拳游戏编程
/*假设有A和B进行猜拳
‘x’表示剪刀,’y’表示石头,’z’表示布
规则如下:
1、 石头 剪刀
2、 布 石头
3、 剪刀 布
*/
#include stdio.h
#define WIN 1
#define LOSE -1
#define EQUAL 0
/*比赛规则函数*/
int game_rule(char a,char b)
{
switch(a)
case ‘x’:
{
switch(b)
case ‘x’:return EQUAL;
case ‘y’:return LOSE;
case ‘z’:return WIN;
}
case ‘y’:
{
switch(b)
case ‘x’:return WIN;
case ‘y’:return EQUAL;
case ‘z’:return LOSE;
}
case ‘z’:
{
switch(b)
case ‘x’:return LOSE;
case ‘y’:return WIN;
case ‘z’:return EQUAL;
}
}
/* main function*/
void main(void)
{
int ans;
int a = b = 0;
char A;
char B;
do
{
prinf(“please input A:\n”);
scanf(“%c”,A);
getchar();
prinf(“please input B:\n”);
scanf(“%c”,B);
getchar();
//有效性检查请自己加上
ans = game_rule(A,B);
if(ans==WIN)
{
a++;
prinf(“A赢了%d局\n”,a);
}
else if(ans==LOSE)
{
b++;
prinf(“A赢了%d局\n”,b);
}
if((a==2)||(b==2))
{
prinf(“game over”);
break;
}
}while(1);
}