如何用c语言编写一个小游戏?

如何用c语言编写一个小游戏?,第1张

一、数学知识:

长方形面积S=a*b

长方形周长L=2*(a+b)

其中a b分别为长方形的宽和高。

二、算法分析:

长方形面积及周长均依赖于宽和高,所以先要输入宽高值,然后根据公式计算,输出结果即可。

三、参考代码:

#include <stdio.h>

void main()

{

    double a,b

    double L,S

    scanf("%lf%lf",&a,&b)//输入宽和高。

    L=2*(a+b)//计算周长。

    S=a*b//计算面积。

    printf("面积=%lf, 周长=%lf\n", S, L)//输出结果。

}

四、注意事项:

因为没有限制输入为整型,所以使用浮点型用来存储各项值。输入输出要用%lf。

//声明

#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++才有真正的类。

编写一个2048游戏需要掌握C语言的基本知识和理解游戏的规则。以下是一个简化版的2048游戏的C语言实现:

cCopy code#include <stdio.h>#include <stdlib.h>#include <time.h>#include <conio.h>#define SIZE 4int matrix[SIZE][SIZE]void init_matrix() {for (int i = 0i <SIZEi++) {for (int j = 0j <SIZEj++) {

matrix[i][j] = 0

}

}

}void add_random_tile() {int empty_tiles[SIZE * SIZE][2] int empty_count = 0 for (int i = 0i <SIZEi++) {for (int j = 0j <SIZEj++) {if (matrix[i][j] == 0) {

empty_tiles[empty_count][0] = i

empty_tiles[empty_count][1] = j

empty_count++

}

}

}if (empty_count == 0) {return

}int index = rand() % empty_count int value = (rand() % 2 + 1) * 2

matrix[empty_tiles[index][0]][empty_tiles[index][1]] = value

}void print_matrix() {for (int i = 0i <SIZEi++) {for (int j = 0j <SIZEj++) {printf("%5d", matrix[i][j])

}printf("\n")

}

}int move(int dx, int dy) {int moved = 0 if (dx != 0) {for (int y = 0y <SIZEy++) {int last_non_empty = dx >0 ? SIZE - 1 : 0 for (int x = dx >0 ? SIZE - 1 : 0x >= 0 &&x <SIZEx -= dx) {if (matrix[y][x] == 0) {continue

}if (matrix[y][last_non_empty] == 0) {

matrix[y][last_non_empty] = matrix[y][x]

matrix[y][x] = 0

moved = 1

} else if (matrix[y][last_non_empty] == matrix[y][x]) {

matrix[y][last_non_empty] *= 2

matrix[y][x] = 0

last_non_empty -= dx

moved = 1

} else if (last_non_empty - dx != x) {

matrix[y][last_non_empty - dx] = matrix[y][x]

matrix[y][x] = 0

last_non_empty -= dx

moved = 1

} else {

last_non_empty -= dx

}

}

}

} else {for (int x = 0x <SIZEx++) {int last_non_empty = dy >0 ? SIZE - 1 : 0 for (int y = dy >0 ? SIZE - 1 : 0y >= 0 &&y <SIZEy -= dy) {if (matrix[y][x] == 0) {continue

}if (matrix[last_non_empty][x] == 0) {

matrix[last_non_empty][x] = matrix[y][x]

matrix[y][x


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12026140.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存