有些疑问,可以用C语言编写游戏吗

Python020

有些疑问,可以用C语言编写游戏吗,第1张

C语言是可以用来编写游戏程序的

C语言的主要特点是面向过程,将实现的方法抽象成一个算法从而实现预想的功能,游戏也可以看作是一个预先要实现的功能,可以通过模块化思想来分块实现游戏

C语言其实是很强大的,只不过大部分人接触的C语言都是比较初级的,没有看到C语言的另一面,实际上,有的windows系统就是用C语言编写的,而且还相当成功

我不是个做游戏的,但我是个玩游戏的。

C语言能用来做游戏吗 ->能

我在网上看到了C语言的游戏源代码复制到VC++里执行都会报错不知道是怎么回事 ->要具体问题具体分析,你可以看看都报什么错,针对性修改即可。

目前编程语言繁多,精通的话,绝大多数都能用来做游戏。推荐你先学好C,再根据之后的兴趣、发展、机会等等确定一门专攻语言。学会C,触类旁通,学其他语言就不是很费力了。

个人认为,编程语言只是一个次要方面(可能30%都不到),整个游戏的设计理念才是重点。你可能要用到文学、物理学、数学很多方面的知识,绝对不要死抠语言。比如一个游戏的人工智能,就是个很大的挑战。你可以自己看书,不必跟着老师走(只是跟着老师走会很惨),觉得要用什么就学什么,多用baidu、google。

//声明

#include<stdio.h>

#include<stdlib.h>

#include<time.h>

#include<conio.h>

#include<windows.h>

#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=0i<SIZEi++)

{

for(j=0j<SIZEj++)

{

n[i][j]=0

}

}

printf( "***********************\n"

" 2048(%dX%d) \n"

" control:W/A/S/D \n"

"press any key to begin \n"

"***********************\n",SIZE,SIZE)

getch()

system("cls")

//n[0][1]=2048

//n[0][3]=2048

while(1)

{

if(isempty(n))

getn(n)

putn(n)

if(!isempty(n)&&isfull(n))

break

sleep(200)

c=getch()

while(c!='w'&&c!='a'&&c!='s'&&c!='d')

c=getch()

math(n,c)

system("cls")

}

printf(" Game Over!\n",score)

return 0

}

//函数

void putn(int n[][SIZE])

{

int i,j

for(i=0i<SIZEi++)

{

for(j=0j<SIZEj++)

printf("| ")

printf("|\n")

for(j=0j<SIZEj++)

{

if(n[i][j]==0)

printf("| ")

else

printf("|%4d ",n[i][j])

}

printf("|\n")

for(j=0j<SIZEj++)

printf("|_____")

printf("|\n")

}

printf("score: %d",score)

}

void getn(int n[][SIZE])

{

int a,b

a=rand()%SIZE

b=rand()%SIZE

while(n[a][b]!=0)

{

a=rand()%SIZE

b=rand()%SIZE

}

n[a][b]=2

}

int isempty(int n[][SIZE])

{

int i,j,count=0

for(i=0i<SIZEi++)

for(j=0j<SIZEj++)

if(n[i][j]==0)

count++

return count

}

int isfull(int n[][SIZE])

{

int i,j,count=0

for(i=0i<SIZEi++)

{

for(j=1j<SIZE-1j++)

{

if(n[i][j]==n[i][j+1]||n[i][j]==n[i][j-1])

count++

}

}

for(j=0j<SIZEj++)

{

for(i=1i<SIZE-1i++)

{

if(n[i][j]==n[i+1][j]||n[i][j]==n[i-1][j])

count++

}

}

return count>0?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=0a<SIZEa++)

m[a]=0

for(j=0j<SIZEj++)

{

for(a=0a<SIZEa++)

{

for(i=0i<SIZE-1i++)

{

if(n[i][j]==0)

{

n[i][j]=n[i+1][j]

n[i+1][j]=0

}

}

}

}

for(j=0j<SIZEj++)

{

for(a=0,i=0i<SIZEi++)

{

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=0i<SIZEi++)

{

n[i][j]=m[i]

m[i]=0

}

}

}

void toa(int n[][SIZE])

{

int i,j,a

int m[SIZE]

for(a=0a<SIZEa++)

m[a]=0

for(i=0i<SIZEi++)

{

for(a=0a<SIZEa++)

{

for(j=0j<SIZE-1j++)

{

if(n[i][j]==0)

{

n[i][j]=n[i][j+1]

n[i][j+1]=0

}

}

}

}

for(i=0i<SIZEi++)

{

for(a=0,j=0j<SIZEj++)

{

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=0j<SIZEj++)

{

n[i][j]=m[j]

m[j]=0

}

}

}

void tos(int n[][SIZE])

{

int i,j,a

int m[SIZE]

for(a=0a<SIZEa++)

m[a]=0

for(j=SIZE-1j>=0j--)

{

for(a=SIZE-1a>=0a--)

{

for(i=SIZE-1i>0i--)

{

if(n[i][j]==0)

{

n[i][j]=n[i-1][j]

n[i-1][j]=0

}

}

}

}

for(j=SIZE-1j>=0j--)

{

for(a=SIZE-1,i=SIZE-1i>=0i--)

{

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-1i>=0i--)

{

n[i][j]=m[i]

m[i]=0

}

}

}

void tod(int n[][SIZE])

{

int i,j,a

int m[SIZE]

for(a=0a<SIZEa++)

m[a]=0

for(i=SIZE-1i>=0i--)

{

for(a=SIZE-1a>=0a--)

{

for(j=SIZE-1j>0j--)

{

if(n[i][j]==0)

{

n[i][j]=n[i][j-1]

n[i][j-1]=0

}

}

}

}

for(i=SIZE-1i>=0i--)

{

for(a=SIZE-1,j=SIZE-1j>=0j--)

{

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-1j>=0j--)

{

n[i][j]=m[j]

m[j]=0

}

}

}

需要注意的是:

srand((unsigned) time(0)rand()是固定形式,不要更改任何一个字符!

如果不能编译,请把sleep(200)注释掉,如果提示不能找到system("cls")请把system("cls")更换为clrscr()。

c语言中没有类,只有结构,也可以像类一样编写,用结构,但其成员都是公开访问的,C++才有真正的类。