一、数学知识:
长方形周长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
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)