游戏排行榜C语言程序,c做游戏代码简单游戏代码c语言

发布时间: 作者:小小游戏哥 来源:大北网

大家好,今天小编来为大家解答以下的问题,关于游戏排行榜C语言程序,c做游戏代码简单游戏代码c语言这个很多人还不知道,现在让我们一起来看看吧!

一、c做游戏代码简单游戏代码c语言

C语言是一种非常流行的编程语言,它可以被用于各种不同的应用程序开发,包括游戏开发。事实上,许多著名的游戏都是用C语言编写的。因此,如果你想成为一名游戏开发人员,学习如何使用C语言编写游戏代码是非常重要的。

首先,我们需要了解C语言的一些基本概念和语法。C语言是一种高级编程语言,它使用一些关键字和运算符来执行各种操作。例如,如果你想声明一个变量来存储玩家的分数,你可以使用以下代码:

intscore;

这个代码声明了一个名为“score”的整数变量。你可以使用其他类型的变量来存储其他类型的数据,例如浮点数、字符和布尔值。

一旦你学会了如何声明变量,你就可以开始编写游戏代码了。一个简单的游戏通常包含一个循环,它不断地更新游戏状态并处理玩家输入。例如,下面是一个使用C语言编写的简单游戏循环:

while(running){

//更新游戏状态

update_game_state();

//处理玩家输入

handle_input();

//绘制游戏画面

draw_game();

}

这个代码片段使用一个名为“running”的布尔变量来控制游戏循环的运行。在游戏循环中,它依次调用了三个函数:update_game_state、handle_input和draw_game。这些函数可以在其他地方定义,并且根据游戏的需要执行各种操作。

除了循环之外,C语言还提供了一些其他的功能,例如条件语句、循环语句和函数。这些功能可以帮助你编写更复杂的游戏代码,例如实现游戏人物的移动、实现游戏的物理引擎等等。

最后,作为一名游戏开发人员,你还需要学会如何使用游戏引擎和其他工具来简化游戏开发过程。许多游戏引擎,例如Unity和UnrealEngine,使用C语言作为它们的编程语言。这些引擎提供了一些高级功能,例如图形渲染、物理模拟和音频处理,可以让你更轻松地开发游戏。

总之,在C语言中编写游戏代码需要学习一些基本知识和语法,并且需要掌握一些高级的游戏开发技术。如果你想成为一名游戏开发人员,学习C语言编程是非常重要的一步。

二、谁有一些简单小游戏的C语言程序

可以学写“贪吃蛇”代码:

#include<stdio.h>

#include<stdlib.h>

#include<conio.h>

#include<time.h>

#include<Windows.h>

#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<H;i++)

{ gtxy(0,i); printf("■");//打印左边框

gtxy(W,i); printf("■");//打印右边框

}

while(1)

{ srand((unsigned)time(NULL));//启动随机数发生器srand()

fod.x=rand()%(W-4)+2;//随机函数rand()产生一个从0到比”(W-4)”小1的数再加2

fod.y=rand()%(H-2)+1;//随机函数rand()产生一个从0到比”(H-2)”小1的数再加1

if(fod.x%2==0) break;//fod.x是食物的横坐标,要是2的倍数(为偶数)

}

setColor(12, 0);//设定打印颜色为淡红字黑底

gtxy(fod.x,fod.y); printf("●");//到食物坐标处打印初试食物

snk.len=3;//蛇身长

snk.speed=350;//刷新蛇的时间,即是移动速度

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<snk.len;i++)

{ snk.x[i]=snk.x[i-1]+2; snk.y[i]=snk.y[i-1];

gtxy(snk.x[i],snk.y[i]); printf("■");//打印蛇身

}

setColor(7, 0);//恢复默认的白字黑底

return;

}

void keymove()//按键操作移动蛇

{ int key;

if( kbhit())//如有按键输入才执行下面操作

{ key=getch();

if(key==224)//值为224表示按下了方向键,下面要再次获取键值

{ key=getch();

if(key==72&&dir!=2)dir=1;//72表示按下了向上方向键

if(key==80&&dir!=1)dir=2;//80为向下

if(key==75&&dir!=4)dir=3;//75为向左

if(key==77&&dir!=3)dir=4;//77为向右

}

if(key==32)

{ while(1) if((key=getch())==32) break;}//32为空格键,这儿用来暂停

}

if(Flag==0)//如没吃食物,才执行下面操作擦掉蛇尾

{gtxy(snk.x[snk.len-1],snk.y[snk.len-1]); printf("");}

int i;

for(i= snk.len- 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;//蛇头触碰上下边界

for(i= 1; i< snk.len; i++)

{ if(snk.x[0]== snk.x[i]&& snk.y[0]== snk.y[i]) return 1;}//蛇头触碰自身

return 0;//没碰到边界及自身时就返回0

}

void setColor(unsigned short ForeColor= 7, unsigned short BackGroundColor= 0)

{ HANDLE handle= GetStdHandle(STD_OUTPUT_HANDLE);

SetConsoleTextAttribute(handle, ForeColor+ BackGroundColor* 0x10);

}//用来设定颜色的函数

三、C语言 游戏 代码

扫雷#include<graphics.h>

#include<stdlib.h>

#include<dos.h>

#define LEFTPRESS 0xff01

#define LEFTCLICK 0xff10

#define LEFTDRAG 0xff19

#define MOUSEMOVE 0xff08

struct

{

int num;/*格子当前处于什么状态,1有雷,0已经显示过数字或者空白格子*/

int roundnum;/*统计格子周围有多少雷*/

int flag;/*右键按下显示红旗的标志,0没有红旗标志,1有红旗标志*/

}Mine[10][10];

int gameAGAIN=0;/*是否重来的变量*/

int gamePLAY=0;/*是否是第一次玩游戏的标志*/

int mineNUM;/*统计处理过的格子数*/

char randmineNUM[3];/*显示数字的字符串*/

int Keystate;

int MouseExist;

int MouseButton;

int MouseX;

int MouseY;

void Init(void);/*图形驱动*/

void MouseOn(void);/*鼠标光标显示*/

void MouseOff(void);/*鼠标光标隐藏*/

void MouseSetXY(int,int);/*设置当前位置*/

int LeftPress(void);/*左键按下*/

int RightPress(void);/*鼠标右键按下*/

void MouseGetXY(void);/*得到当前位置*/

void Control(void);/*游戏开始,重新,关闭*/

void GameBegain(void);/*游戏开始画面*/

void DrawSmile(void);/*画笑脸*/

void DrawRedflag(int,int);/*显示红旗*/

void DrawEmpty(int,int,int,int);/*两种空格子的显示*/

void GameOver(void);/*游戏结束*/

void GameWin(void);/*显示胜利*/

int MineStatistics(int,int);/*统计每个格子周围的雷数*/

int ShowWhite(int,int);/*显示无雷区的空白部分*/

void GamePlay(void);/*游戏过程*/

void Close(void);/*图形关闭*/

void main(void)

{

Init();

Control();

Close();

}

void Init(void)/*图形开始*/

{

int gd=DETECT,gm;

initgraph(&gd,&gm,"c:\\tc");

}

void Close(void)/*图形关闭*/

{

closegraph();

}

void MouseOn(void)/*鼠标光标显示*/

{

_AX=0x01;

geninterrupt(0x33);

}

void MouseOff(void)/*鼠标光标隐藏*/

{

_AX=0x02;

geninterrupt(0x33);

}

void MouseSetXY(int x,int y)/*设置当前位置*/

{

_CX=x;

_DX=y;

_AX=0x04;

geninterrupt(0x33);

}

int LeftPress(void)/*鼠标左键按下*/

{

_AX=0x03;

geninterrupt(0x33);

return(_BX&1);

}

int RightPress(void)/*鼠标右键按下*/

{

_AX=0x03;

geninterrupt(0x33);

return(_BX&2);

}

void MouseGetXY(void)/*得到当前位置*/

{

_AX=0x03;

geninterrupt(0x33);

MouseX=_CX;

MouseY=_DX;

}

void Control(void)/*游戏开始,重新,关闭*/

{

int gameFLAG=1;/*游戏失败后判断是否重新开始的标志*/

while(1)

{

if(gameFLAG)/*游戏失败后没判断出重新开始或者退出游戏的话就继续判断*/

{

GameBegain();/*游戏初始画面*/

GamePlay();/*具体游戏*/

if(gameAGAIN==1)/*游戏中重新开始*/

{

gameAGAIN=0;

continue;

}

}

MouseOn();

gameFLAG=0;

if(LeftPress())/*判断是否重新开始*/

{

MouseGetXY();

if(MouseX>280&&MouseX<300&&MouseY>65&&MouseY<85)

{

gameFLAG=1;

continue;

}

}

if(kbhit())/*判断是否按键退出*/

break;

}

MouseOff();

}

void DrawSmile(void)/*画笑脸*/

{

setfillstyle(SOLID_FILL,YELLOW);

fillellipse(290,75,10,10);

setcolor(YELLOW);

setfillstyle(SOLID_FILL,BLACK);/*眼睛*/

fillellipse(285,75,2,2);

fillellipse(295,75,2,2);

setcolor(BLACK);/*嘴巴*/

bar(287,80,293,81);

}

void DrawRedflag(int i,int j)/*显示红旗*/

{

setcolor(7);

setfillstyle(SOLID_FILL,RED);

bar(198+j*20,95+i*20,198+j*20+5,95+i*20+5);

setcolor(BLACK);

line(198+j*20,95+i*20,198+j*20,95+i*20+10);

}

游戏排行榜C语言程序,c做游戏代码简单游戏代码c语言

void DrawEmpty(int i,int j,int mode,int color)/*两种空格子的显示*/

{

setcolor(color);

setfillstyle(SOLID_FILL,color);

if(mode==0)/*没有单击过的大格子*/

bar(200+j*20-8,100+i*20-8,200+j*20+8,100+i*20+8);

else

if(mode==1)/*单击过后显示空白的小格子*/

bar(200+j*20-7,100+i*20-7,200+j*20+7,100+i*20+7);

}

void GameBegain(void)/*游戏开始画面*/

{

int i,j;

cleardevice();

if(gamePLAY!=1)

{

MouseSetXY(290,70);/*鼠标一开始的位置,并作为它的初始坐标*/

MouseX=290;

MouseY=70;

}

gamePLAY=1;/*下次按重新开始的话鼠标不重新初始化*/

mineNUM=0;

setfillstyle(SOLID_FILL,7);

bar(190,60,390,290);

for(i=0;i<10;i++)/*画格子*/

for(j=0;j<10;j++)

DrawEmpty(i,j,0,8);

setcolor(7);

DrawSmile();/*画脸*/

randomize();

for(i=0;i<10;i++)/*100个格子随机赋值有没有地雷*/

for(j=0;j<10;j++)

{

Mine[i][j].num=random(8);/*如果随机数的结果是1表示这个格子有地雷*/

if(Mine[i][j].num==1)

mineNUM++;/*现有雷数加1*/

else

Mine[i][j].num=2;

Mine[i][j].flag=0;/*表示没红旗标志*/

}

sprintf(randmineNUM,"%d",mineNUM);/*显示这次总共有多少雷数*/

setcolor(1);

settextstyle(0,0,2);

outtextxy(210,70,randmineNUM);

mineNUM=100-mineNUM;/*变量取空白格数量*/

MouseOn();

}

void GameOver(void)/*游戏结束画面*/

{

int i,j;

setcolor(0);

for(i=0;i<10;i++)

for(j=0;j<10;j++)

if(Mine[i][j].num==1)/*显示所有的地雷*/

{

DrawEmpty(i,j,0,RED);

setfillstyle(SOLID_FILL,BLACK);

fillellipse(200+j*20,100+i*20,7,7);

}

}

void GameWin(void)/*显示胜利*/

{

setcolor(11);

settextstyle(0,0,2);

outtextxy(230,30,"YOU WIN!");

}

int MineStatistics(int i,int j)/*统计每个格子周围的雷数*/

{

int nNUM=0;

if(i==0&&j==0)/*左上角格子的统计*/

{

if(Mine[0][1].num==1)

nNUM++;

if(Mine[1][0].num==1)

nNUM++;

if(Mine[1][1].num==1)

nNUM++;

}

else

if(i==0&&j==9)/*右上角格子的统计*/

{

if(Mine[0][8].num==1)

nNUM++;

if(Mine[1][9].num==1)

nNUM++;

if(Mine[1][8].num==1)

nNUM++;

}

else

if(i==9&&j==0)/*左下角格子的统计*/

{

if(Mine[8][0].num==1)

nNUM++;

if(Mine[9][1].num==1)

nNUM++;

if(Mine[8][1].num==1)

nNUM++;

}

else

if(i==9&&j==9)/*右下角格子的统计*/

{

if(Mine[9][8].num==1)

nNUM++;

if(Mine[8][9].num==1)

nNUM++;

if(Mine[8][8].num==1)

nNUM++;

}

else if(j==0)/*左边第一列格子的统计*/

{

if(Mine[i][j+1].num==1)

nNUM++;

if(Mine[i+1][j].num==1)

nNUM++;

if(Mine[i-1][j].num==1)

nNUM++;

if(Mine[i-1][j+1].num==1)

nNUM++;

if(Mine[i+1][j+1].num==1)

nNUM++;

}

else if(j==9)/*右边第一列格子的统计*/

{

if(Mine[i][j-1].num==1)

nNUM++;

if(Mine[i+1][j].num==1)

nNUM++;

if(Mine[i-1][j].num==1)

nNUM++;

if(Mine[i-1][j-1].num==1)

nNUM++;

if(Mine[i+1][j-1].num==1)

nNUM++;

}

else if(i==0)/*第一行格子的统计*/

{

if(Mine[i+1][j].num==1)

nNUM++;

if(Mine[i][j-1].num==1)

nNUM++;

if(Mine[i][j+1].num==1)

nNUM++;

if(Mine[i+1][j-1].num==1)

nNUM++;

if(Mine[i+1][j+1].num==1)

nNUM++;

}

else if(i==9)/*最后一行格子的统计*/

{

if(Mine[i-1][j].num==1)

nNUM++;

if(Mine[i][j-1].num==1)

nNUM++;

if(Mine[i][j+1].num==1)

nNUM++;

if(Mine[i-1][j-1].num==1)

nNUM++;

if(Mine[i-1][j+1].num==1)

nNUM++;

}

else/*普通格子的统计*/

{

if(Mine[i-1][j].num==1)

nNUM++;

if(Mine[i-1][j+1].num==1)

nNUM++;

if(Mine[i][j+1].num==1)

nNUM++;

if(Mine[i+1][j+1].num==1)

nNUM++;

if(Mine[i+1][j].num==1)

nNUM++;

if(Mine[i+1][j-1].num==1)

nNUM++;

if(Mine[i][j-1].num==1)

nNUM++;

if(Mine[i-1][j-1].num==1)

nNUM++;

}

return(nNUM);/*把格子周围一共有多少雷数的统计结果返回*/

}

int ShowWhite(int i,int j)/*显示无雷区的空白部分*/

{

if(Mine[i][j].flag==1||Mine[i][j].num==0)/*如果有红旗或该格处理过就不对该格进行任何判断*/

return;

mineNUM--;/*显示过数字或者空格的格子就表示多处理了一个格子,当所有格子都处理过了表示胜利*/

if(Mine[i][j].roundnum==0&&Mine[i][j].num!=1)/*显示空格*/

{

DrawEmpty(i,j,1,7);

Mine[i][j].num=0;

}

else

if(Mine[i][j].roundnum!=0)/*输出雷数*/

{

DrawEmpty(i,j,0,8);

sprintf(randmineNUM,"%d",Mine[i][j].roundnum);

setcolor(RED);

outtextxy(195+j*20,95+i*20,randmineNUM);

Mine[i][j].num=0;/*已经输出雷数的格子用0表示已经用过这个格子*/

return;

}

/*8个方向递归显示所有的空白格子*/

if(i!=0&&Mine[i-1][j].num!=1)

ShowWhite(i-1,j);

if(i!=0&&j!=9&&Mine[i-1][j+1].num!=1)

ShowWhite(i-1,j+1);

if(j!=9&&Mine[i][j+1].num!=1)

ShowWhite(i,j+1);

if(j!=9&&i!=9&&Mine[i+1][j+1].num!=1)

ShowWhite(i+1,j+1);

if(i!=9&&Mine[i+1][j].num!=1)

ShowWhite(i+1,j);

if(i!=9&&j!=0&&Mine[i+1][j-1].num!=1)

ShowWhite(i+1,j-1);

if(j!=0&&Mine[i][j-1].num!=1)

ShowWhite(i,j-1);

if(i!=0&&j!=0&&Mine[i-1][j-1].num!=1)

ShowWhite(i-1,j-1);

}

void GamePlay(void)/*游戏过程*/

{

int i,j,Num;/*Num用来接收统计函数返回一个格子周围有多少地雷*/

for(i=0;i<10;i++)

for(j=0;j<10;j++)

Mine[i][j].roundnum=MineStatistics(i,j);/*统计每个格子周围有多少地雷*/

while(!kbhit())

{

if(LeftPress())/*鼠标左键盘按下*/

{

MouseGetXY();

if(MouseX>280&&MouseX<300&&MouseY>65&&MouseY<85)/*重新来*/

{

MouseOff();

gameAGAIN=1;

break;

}

if(MouseX>190&&MouseX<390&&MouseY>90&&MouseY<290)/*当前鼠标位置在格子范围内*/

{

j=(MouseX-190)/20;/*x坐标*/

i=(MouseY-90)/20;/*y坐标*/

if(Mine[i][j].flag==1)/*如果格子有红旗则左键无效*/

continue;

if(Mine[i][j].num!=0)/*如果格子没有处理过*/

{

if(Mine[i][j].num==1)/*鼠标按下的格子是地雷*/

{

MouseOff();

GameOver();/*游戏失败*/

break;

}

else/*鼠标按下的格子不是地雷*/

{

MouseOff();

Num=MineStatistics(i,j);

if(Num==0)/*周围没地雷就用递归算法来显示空白格子*/

ShowWhite(i,j);

else/*按下格子周围有地雷*/

{

sprintf(randmineNUM,"%d",Num);/*输出当前格子周围的雷数*/

setcolor(RED);

outtextxy(195+j*20,95+i*20,randmineNUM);

mineNUM--;

}

MouseOn();

Mine[i][j].num=0;/*点过的格子周围雷数的数字变为0表示这个格子已经用过*/

if(mineNUM<1)/*胜利了*/

{

GameWin();

break;

}

}

}

}

}

if(RightPress())/*鼠标右键键盘按下*/

{

MouseGetXY();

if(MouseX>190&&MouseX<390&&MouseY>90&&MouseY<290)/*当前鼠标位置在格子范围内*/

{

j=(MouseX-190)/20;/*x坐标*/

i=(MouseY-90)/20;/*y坐标*/

MouseOff();

if(Mine[i][j].flag==0&&Mine[i][j].num!=0)/*本来没红旗现在显示红旗*/

{

DrawRedflag(i,j);

Mine[i][j].flag=1;

}

else

if(Mine[i][j].flag==1)/*有红旗标志再按右键就红旗消失*/

{

DrawEmpty(i,j,0,8);

Mine[i][j].flag=0;

}

}

MouseOn();

sleep(1);

}

}

}

OK,关于游戏排行榜C语言程序和c做游戏代码简单游戏代码c语言的内容到此结束了,希望对大家有所帮助。

相关文章
推荐游戏
航海与家园
航海与家园
手游攻略 382.5M
下载
天影奇缘
天影奇缘
手游攻略 10.6M
下载
汉风幻想三国OL
汉风幻想三国OL
手游攻略 129.4M
下载
星际跃迁
星际跃迁
手游攻略 281.0M
下载
斗罗大陆3
斗罗大陆3
手游攻略 566.9M
下载
守护神域
守护神域
手游攻略 18.2M
下载