当前位置:懂科普 >

综合知识

> 怎么写c游戏

怎么写c游戏

1. 怎样用C语言编写一个小游戏

“贪吃蛇”C代码:#include #include #include #include #include #define W 78 //游戏框的宽,x轴#define H 26 //游戏框的高,y轴 int dir=3; //方向变量,初值3表示向“左” int Flag=0; //吃了食物的标志(1是0否) int score=0; //玩家得分 struct food{ int x; //食物的x坐标 int y; //食物的y坐标 }fod; //结构体fod有2个成员 struct snake{ int len; //身长 int speed; //速度 int x[100]; int y[100]; }snk; //结构体snk有4个成员 void gtxy( int x,int y) //控制光标移动的函数 { COORD coord; coord.X=x; coord.Y=y; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord); } void gtxy( int x,int y); //以下声明要用到的几个自编函数 void csh( ); //初始化界面 void keymove( ); //按键操作移动蛇 void putFod( ); //投放食物 int Over( ); //游戏结束(1是0否) void setColor(unsigned short p, unsigned short q); //设定显示颜色 int main( ) //主函数 { csh( ); while(1) { Sleep(snk.speed); keymove( ); putFod( ); if(Over( )) {system(“cls”); gtxy(W/2+1,H/2); printf(“游戏结束!T__T”); gtxy(W/2+1,H/2+2); printf(“玩家总分:%d分”,score); getch( ); break; } } return 0; } void csh( ) //初始化界面 { int i; gtxy(0,0); CONSOLE_CURSOR_INFO cursor_info={1,0}; //以下两行是隐藏光标的设置 SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info); for(i=0;i<=W;i=i+2) //横坐标要为偶数,因为这个要打印的字符占2个位置 { setColor(2, 0); //设定打印颜色为绿字黑底 gtxy(i,0); printf("■"); //打印上边框 gtxy(i,H); printf("■"); //打印下边框 } for(i=1;i时间,即是移动速度 snk.x[0]=W/2+1; //蛇头横坐标要为偶数(因为W/2=39) snk.y[0]=H/2; //蛇头纵坐标 setColor(9, 0); //设定打印颜色为淡蓝字黑底 gtxy(snk.x[0], snk.y[0]); printf("■"); //打印蛇头 for(i=1;i 0; i--) //从蛇尾起每节存储前一节坐标值(蛇头除外) { snk.x[i]=snk.x[i-1]; snk.y[i]=snk.y[i-1]; } switch (dir) //判断蛇头该往哪个方向移动,并获取最新坐标值 { case 1: snk.y[0]--; break; //dir=1要向上移动 case 2: snk.y[0]++; break; //dir=2要向下移动 case 3: snk.x[0]-=2; break; //dir=3要向左移动 case 4: snk.x[0]+=2; break; //dir=4要向右移动 } setColor(9, 0); gtxy(snk.x[0], snk.y[0]); printf("■"); //打印蛇头 if (snk.x[0] == fod.x && snk.y[0] == fod.y) //如吃到食物则执行以下操作 { printf("07"); snk.len++; score += 100; snk.speed -= 5; Flag = 1; } //007是响铃 else Flag = 0; //没吃到食物Flag的值为0 if(snk.speed<150) snk.speed= snk.speed+5; //作弊码,不让速度无限加快 } void putFod( ) //投放食物 { if (Flag == 1) //如吃到食物才执行以下操作,生成另一个食物 { while (1) { int i,n= 1; srand((unsigned)time(NULL)); //初始化随机数发生器srand( ) fod.x = rand( ) % (W - 4) + 2; //产生在游戏框范围内的一个x坐标值 fod.y = rand( ) % (H - 2) + 1; //产生在游戏框范围内的一个y坐标值 for (i = 0; i < snk.len; i++) //随机生成的食物不能在蛇的身体上 { if (fod.x == snk.x[i] &&fod.y == snk.y[i]) { n= 0; break;} } if (n && fod.x % 2 == 0) break; //n不为0且横坐标为偶数,则食物坐标取值成功 } setColor(12, 0); gtxy(fod.x, fod.y); printf("●"); //光标到取得的坐标处打印食物 } return; } int Over( ) //判断游戏是否结束的函数 { int i; setColor(7, 0); gtxy(2,H+1); printf(“暂停键:space.”); //以下打印一些其它信息 gtxy(2,H+2); printf(“游戏得分:%d”,score); if (snk.x[0] == 0 || snk.x[0] == W) return 1; //蛇头触碰左右边界 if (snk.y[0] == 0 || snk.y[0] == H) return 1; //蛇头触。

怎么写c游戏
2. 求C写的最简单的游戏

猜数字游戏,希望对你有帮助# include# include# includeint main(){ int a,b; char c; srand(time(NULL)); a=1+(rand()%1000); printf("I have a number between 1 and 1000.nCan you guess my number?nPlease type your first guess.n"); scanf("%d",&b); while(b!=-1) { if(b==a) { printf("Excellent! You guessed the number!nWould you like to play again(y or n)?"); scanf("%c",&c); scanf("%c",&c); switch(c){ case 'y': printf("I have a number between 1 and 1000.nCan you guess my number?nPlease type your first guess.n"); scanf("%d",&b); break; case 'n': goto END; break; } } while(ba) { printf("Too high.Try again."); scanf("%d",&b); } }END: return 0;}。

3. 如何用c语言写一个游戏

请编译前在主目录下建立一个文本文件(xia.txt)内容为:0 0 0 0 0 哈哈 #include #include #include #include union REGS regs; unsigned int zhuan[5]; int Msinit(); void Setmouse(int left,int right,int top,int buttom); int Msread(int *xp,int *yp,int *bup); void Draw(int x,int y,int sizex,int sizey); main() {int mode=VGAHI,driver=VGA; unsigned int l; int i,gi,gj,j,flag=1;/*i,j是循环变量,flag是标记变量,-1:向x负半轴移动,+1:向x正半轴移动*/ double qx,qy,k,b=0.0,speech=0.4,x,y; double r=2.0,bx=60.0,byy=270.0; double pianx=100.0,piany=100.0,tx=20.0,ty=10.0,jx=2.0,jy=2.0; int mx=0,my=0,mb,sum;/*sum纪录砖块的数目*/ FILE * p; if((p = fopen("xia.txt", "r")) == NULL) {printf("The file cannot open!n"); exit(1);} initgraph(&driver,&mode,"tcBGI"); Msinit(); Setmouse((int)(pianx+1+bx/2),(int)((tx+jx)*8+pianx-1-bx/2),(int)byy+piany,(int)byy+piany); star:cleardevice();/*程序重载的介入点*/ sum=0; qx=100.0+pianx-10;qy=180.0+pianx-10;k=0.33; setcolor(7); rectangle((int)(pianx-2),(int)(piany-2),(int)((tx+jx)*8+2+pianx),302+piany); setcolor(1); rectangle((int)(pianx-1),(int)(piany-1),(int)((tx+jx)*8+1+pianx),301+piany); /*读取盘面情况*/ for(i=0;i<5;i++) fscanf(p,"%x ",&zhuan[i]); /*画砖块*/ for(i=0;i<5;i++) {l=1; for(j=0;j<16;j++) {if((zhuan[i]&l)==0) {Draw((int)((jx+tx)*((16*i+j)%8)+pianx+jx),(int)((jy+ty)*((int)((16*i+j)/8))+piany+jy), (int)tx,(int)ty); sum+=1; } l=l*2; } } for(;;) { setfillstyle(1, 0); bar(mx-bx/2,my,mx+bx/2,my+5); Msread(&mx, &my, &mb); Draw(mx-bx/2,my,bx,5); setcolor(0); circle(qx,qy,r); /*判断求是否反弹*/ if(qx-r<=pianx+1 || qx+r>=(tx+jx)*8+pianx-1) {flag=-flag;k=-k;} if(qy-r<=piany+1) k=-k; for(gi=0;gi<5;gi++) {l=1; for(gj=0;gj<16;gj++) { if((zhuan[gi]&l)==0) {j=(16*gi+gj)/8; i=(16*gi+gj)%8; x=(jx+tx)*i+jx+tx/2+pianx; y=(jy+ty)*j+jy+ty/2+piany; /*边判断1*/ if(qy>=y-ty/2 && qy<=y+ty/2 &&(pow(qx+r-x+tx/2,2)<1 || pow(qx-r-x-tx/2,2)<1)) {flag=-flag;k=-k; zhuan[gi]=zhuan[gi]|l; sum-=1; if(sum==0) {printf("Win!n");getch();goto star;} setfillstyle(1, 0); bar((jx+tx)*i+pianx+jx,(jy+ty)*j+piany+jy,(jx+tx)*i+pianx+jx+tx,(jy+ty) *j+piany+jy+ty); } else /*边判断2*/ if(qx> ;=x-tx/2 && qx<=x+tx/2 &&(pow(qy+r-y+ty/2,2)<1 || pow(qy-r-y-ty/2,2)<1)) {k=-k; zhuan[gi]=zhuan[gi]|l; sum-=1; if(sum==0) {printf("Win!n");getch();goto star;} setfillstyle(1, 0); bar((jx+tx)*i+pianx+jx,(jy+ty)*j+piany+jy,(jx+tx)*i+pianx+jx+tx,(jy+ty) *j+piany+jy+ty); } else /*角判断*/ if(pow(qx-x+tx/2,2)+pow(qy-y+ty/2,2)<=r*r || pow(qx-x-tx/2,2)+pow(qy-y+ty/2,2)<=r*r || pow(qx-x+tx/2,2)+pow(qy-y-ty/2,2)<=r*r || pow(qx-x-tx/2,2)+pow(qy-y-ty/2,2)<=r*r) {flag=-flag; zhuan[gi]=zhuan[gi]|l; sum-=1; if(sum==0) {printf("Win!n");getch();goto star;} setfillstyle(1, 0); bar((jx+tx)*i+pianx+jx,(jy+ty)*j+piany+jy,(jx+tx)*i+pianx+jx+tx,(jy+ty) *j+piany+jy+ty); } }l=l*2;}} /*棍棒的反弹*/ if(qx<=mx+bx/2 && qx>=mx-bx/2 && pow(qy+r-my,2)<1) {k=-(k/pow(k*k,0.5))*(0.3*bx/(pow(pow (qx-mx,2),0.5)+0.000001));} if((int)(qy+r)>my+0.5) {printf("DEAD!");Setmouse(0,0,640,480);getch();exit(1);} b=qy-qx*k; if(flag==1) qx=qx+speech/pow(1.0+k*k,0.5); if(flag==-1) qx=qx-speech/pow(1.0+k*k,0.5); qy=qx*k+b;/*计算球心坐标*/ setcolor(14); circle((int)qx,(int)qy,r); delay(1); if(mb==1) {Setmouse(0,0,640,480);exit(1);} } } /*这个函数用于实现鼠标的初始化*/ int Msinit() {int recored; regs.x.ax=0; int86 (0x33, & regs, & regs); recored=regs.x.ax; if(recored==0) {printf("Mouse not foundd or Mouse driver not installed.n"); return 0; } else return recored; } /*下面的函数用于实现设置鼠标的移动范围*/ void Setmouse(int left,int right,int top,int buttom) { regs.x.ax=7; regs.x.cx=left; regs.x.dx=right; int86(0x33,& regs,& regs); regs.x.ax=8; regs.x.cx=top; regs.x.dx=buttom; int86(0x33,& regs,& regs); } /*下面这个函数用于实现鼠标的读取*/ int Msread(int *xp,int *yp,int *bup) {int xnew,ynew,ch; if(kbhit()) return getch(); regs.x.ax=3; int86(0x33,& regs,& regs); xnew=regs.x.cx; ynew=regs.x.dx; *bup=regs.x.bx; *xp=xnew; *yp=ynew; return -1; } /*下面这个子程序是完成描绘一个按钮*/ void Draw(int x,int y,int sizex,int sizey)/* x, y为左上角坐标sizex,sizey为长和宽*/ {int sizx=sizex-1; int sizy=sizey-1; setcolor(15);/*这里最好用白色*/ line(x,y,x+sizx-1,y); line(x,y+1,x+sizx-2,y+1); line(x,y,x,y+sizy-1); line(x+1,y,x+1,y+sizy-2); setcolor(8);/*这里最好用深灰色*/ line(x+1,y+sizy,x+sizx,y+sizy); line(x+2,y+sizy-1,x+sizx,y+sizy-1); line(x+sizx-1,y+1,x+sizx-1,y+sizy); line(x+sizx,y+2,x+sizx,y+sizy); setcolor(7);/*这里最好用灰色*/ putpixel(x,y+sizy,3); putpixel(x+1,y+sizy-1,3); putpixel(x+sizx,y,3); putpixel(x+sizx-1,y+1,3); setfillstyle(1, 7);/*这里最好用灰色,设置填充模式*/ bar(x+2,y+2,x+sizx-2,y+sizy-2); } 参考资料:。

4. 教你如何使用C语言编写简单小游戏

//声明#include#include#include#include#include#define SIZE 4 static int score=0; void putn(int n[][SIZE]); void getn(int n[][SIZE]); int isempty(int n[][SIZE]); int isfull(int n[][SIZE]); void math(int n[][SIZE],char c); void tow(int n[][SIZE]); void toa(int n[][SIZE]); void tos(int n[][SIZE]); void tod(int n[][SIZE]);//主函数 int main() { int i,j; int n[SIZE][SIZE]; char c=' '; for(i=0;i0?0:1; } void math(int n[][SIZE],char c) { switch(c) { case 'w':tow(n);break; case 'a':toa(n);break; case 's':tos(n);break; case 'd':tod(n);break; default :; } } void tow(int n[][SIZE]) { int i,j,a; int m[SIZE]; for(a=0;a=0;j--) { for(a=SIZE-1;a>=0;a--) { for(i=SIZE-1;i>0;i--) { if(n[i][j]==0) { n[i][j]=n[i-1][j]; n[i-1][j]=0; } } } } for(j=SIZE-1;j>=0;j--) { for(a=SIZE-1,i=SIZE-1;i>=0;i--) { if(n[i][j]!=n[i-1][j]&&n[i][j]!=0||n[i][j]==2048) { m[a--]=n[i][j]; n[i][j]=0; } else if(n[i][j]==n[i-1][j]) { m[a--]=n[i][j]+n[i-1][j]; score+=m[a+1]; n[i][j]=0,n[i-1][j]=0; } } for(i=SIZE-1;i>=0;i--) { n[i][j]=m[i]; m[i]=0; } } } void tod(int n[][SIZE]) { int i,j,a; int m[SIZE]; for(a=0;a=0;i--) { for(a=SIZE-1;a>=0;a--) { for(j=SIZE-1;j>0;j--) { if(n[i][j]==0) { n[i][j]=n[i][j-1]; n[i][j-1]=0; } } } } for(i=SIZE-1;i>=0;i--) { for(a=SIZE-1,j=SIZE-1;j>=0;j--) { if(n[i][j]!=n[i][j-1]&&n[i][j]!=0||n[i][j]==2048) { m[a--]=n[i][j]; n[i][j]=0; } else if(n[i][j]==n[i][j-1]) { m[a--]=n[i][j]+n[i][j-1]; score+=m[a+1]; n[i][j]=0,n[i][j-1]=0; } } for(j=SIZE-1;j>=0;j--) { n[i][j]=m[j]; m[j]=0; } } } 需要注意的是:srand((unsigned) time(0);rand();是固定形式,不要更改任何一个字符!如果不能编译,请把sleep(200);注释掉,如果提示不能找到system("cls");请把system("cls")更换为clrscr();。

5. 如何用c语言编写小游戏

#包括

#包括中

#包括中

的#include“windows.h的”

无效gotoxy(诠释十,诠释y)/ *定义gotoxy函数* /

COORD℃;

CX = X-1;

CY = Y-1;

SetConsoleCursorPosition(GetStdHandle( STD_OUTPUT_HANDLE),C);

}

国际主要()

{

结构点

整数的x,y ;/ *该点的位置,其中x和y坐标* /

整数XV,YV ;/ *点x轴的速度,y轴* /

}人;

长的磷;

男人X = man.y = 20;

man.xv = man.yv = 1;

系统(“CLS”);

P =千兆;

同时(对 - )

{

如果(P%50000)

继续;

gotoxy(man.x,man.y);/ *将光标移动到指定的坐标* / 的printf(“”);/ *输出一个空格,前面的字符擦拭* /

man.x + = man.xv ;/ *水平的X轴速度运动* /

方向man.y + = man.yv ;/ * y轴垂直方向速度* /

如果(man.x == 0 | | man.x == 80) man.xv * = - 1;

如果(man.y == 0 | | man.y == 80)

man.yv * = -1;

gotoxy(man.x,man.y);

的printf(“%C B”,2); / * 2 * / }

用getchar();

返回0 ;

}

这是一个感人的笑脸,你可以用最简单的开始

6. C语言怎么做游戏

可以 但是 1个人 不可以 首先术业有专攻 企划考虑游戏内容风格 画师们制造具体人物风格 关卡样子等等 程序师完成游戏内部动作 当然这是楼主说的企业级作品 必须是团队来完成 一个没那么精力的

还有 C语言 能做这些游戏 但是 如果你在企业就职时 做的面试作品 或 以后工作 必须是 c++

因为同样的程序 C语言站的内存太大 而且 比起c++稍差

在于C语言运行后 随机在内存中寻找放数据的地方

c++则是先确保 在输出

7. 怎样用C语言设计游戏程序

我不完全同意一楼的观点,虽然我最早也是用C++编的,但并不认为C就编不了。3D就更不用说了,现在学就是空中楼阁。编游戏可以只是个兴趣,不一定以后就从游戏业。

我觉得游戏的本质就是和玩家的互动,也就是输入输出。举4个例子,由易到难。

1. 输出1+1 = ? 输入2,则输出正确,输入其他则显示错误

2. 24点游戏,输出4个数,输入一行表达式,程序内部计算表达式的值(比较费劲),若=24则返回胜利,否则失败

3. 五子棋(无AI,否则难),黑白方轮流输入坐标,每次输入完坐标都重新输出一次棋盘上所有棋子,具体方式就是把存储棋子的矩阵挨个输出,无棋输出空格,黑输出*,白输出o,循环直到判断游戏是否结束的函数返回值为真,即有5子相连才结束。

4. 贪食蛇。这个需要查阅有关**的资料:线程(或计时器),响应键盘按键,随机数等等。蛇每隔单位时间向当前方向前进一步,然后刷新(也就是把画面重新输出一遍),在随机位置产生食物,蛇的尾巴经过食物(即已经消化)后加长一段。按方向键时改变记录当前方向变量的值。加入判断死亡的机制。

这个用控制台(就是和DOS似的,只有press any key to continue之类文字的界面)也可以实现,但是相关资料较少很难找,选择图形编程(windows下常用的软件都是这样,有窗口的)资料更多一些,如果你是在windows上编,就查C语言windows api,刚开始编时不会很方便。由易到难地尝试吧,不必急于用图形编程,控制台也是可以编出好游戏的,这是基础。

8. 用什么软件来编写c语言编写c语言游戏,怎么用哪个软件来编,写出

编写C语言的程序用记事本即可,然后在装一个编译器就可以,例如你可以用记事本或Notepad++写源代码(大鸟的话建议用emacs写源代码),然后你可以安装一个GNU的GCC编译器,或其他编译器也可以,然后就直接可以把源代码编译成程序啦,就这么简单

------------------------------------------------------------------------------------------------

但然你如果是新手的话,可能你不是很理解我上面说的这些,C的入门书中也不会提上面的方法【上面的方法是针对厌倦了VC的人用的】

你如果是纯新手的话,建议用VC++6.0,纯傻瓜式操作,但由于微软的VC为程序员代劳了很多配置的工作,所以很多写C的人根本没有真正理解编程。。。..

9. 可以用C语言编写游戏吗

我对你提出的问题的题意的理解是编一个计算器程序。。。。。。。。。如果要是那样子的话我给出代码:

#include <stdio.h>

int main()

{

char cp;

int a, b;

scanf("%d %c %d", &a, &cp, &b);

if (cp == '-')printf("%d", a - b);

else if(cp == '+')printf("%d", a + b);

else if (cp == '*')printf("%d", a * b);

else if (cp == '%')printf("%d", a % b);

return 0;

}

如果要知道这几个符号在机器中的实现机理的话:

+和-不说了*就相当于多做几遍加法。而%是用位运算之类的方法进行运算的所以%的效率最低

不知道是不是你的编译器有问题我的程序运行起来是得15的

你是否正确输入了????

标签: 游戏
  • 文章版权属于文章作者所有,转载请注明 https://dongkepu.com/zonghezhishi/po874g.html