//声明
#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++才有真正的类。
下落的小鸟
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<time.h>
#include<Windows.h>
int Grade = 1, Score = 0, Max_blank = 9, Distance = 18
struct Birds{int xint y} //定义一种Birds数据类型(含3个成员)
Birds *Bird = (Birds*)malloc(sizeof(Birds)) //定义Birds类型 指针变量Bird并赋初值
struct Bg{int x, yint l_blankBg *priBg *next} //定义一种Bg数据类型(含5个成员)
Bg *Bg1 = (Bg*)malloc(sizeof(Bg)) //定义Bg类型 指针变量Bg1并赋初值
void Position(int x, int y) //光标定位函数(用于指定位置输出)
{COORD pos = { x - 1, y - 1 }
HANDLE Out = GetStdHandle(STD_OUTPUT_HANDLE)
SetConsoleCursorPosition(Out, pos)
}
void Csh( ) //初始化界面
{
printf("══════════════════════════════════════\n")
printf(" ■■ ■■ C语言版 Flappy Bird \n")
printf(" ■■ ■■\n")
printf(" ■■ ■■\n")
printf(" ■■ ■■ 瞎搞人:yyposs原创\n")
printf(" ■■ ■■ 瞎搞日期:2014.2\n")
printf(" ■■ ■■\n")
printf(" ■■ ■■ 改编:鸣蝉百2021.7\n")
printf(" ■■ ■■ 操作:按向上方向键让小鸟起飞\n")
printf(" ■■\n")
printf(" ■■\n")
printf(" ■■ ■■\n")
printf(" ■■ ■■\n")
printf(" ■■ ■■\n")
printf(" ■■ ■■\n")
printf(" ■■ ■■ DEVc++运行通过\n")
printf("══════════════════════════════════════\n")
printf(" 按键继续…")
getch( )
system("cls")
}
void PrFK( ) //输出方框(游戏范围区)
{int i
Position(1, 1)printf("╔") Position(79, 1)printf("╗")
Position(1, 24)printf("╚") Position(79, 24)printf("╝")
for (i = 3i <= 78i += 2){Position(i, 1)printf("═")Position(i, 24)printf("═")}
for(i=2i<=23i++)
{ Position(1,i)printf("║")if(i<11)printf("0%d",i-1)else printf("%d",i-1)
Position(79,i)printf("║")
}
Position(4, 25)printf("小鸟即将出现,请准备按键起飞… ")
getch( )
Position(4, 25)printf(" ")
}
void CreatBg( ) //创建障碍物坐标(便于打印输出)
{Bg *Bg2 = (Bg*)malloc(sizeof(Bg))
Bg1->x = 90Bg1->y = 8 //确定障碍物的一对基本坐标(此时值是在游戏框之外)
Bg2->x = Bg1->x + DistanceBg2->y = 9 //下一障碍物的基本坐标x、y
Bg1->l_blank = Max_blank - Grade //障碍物上下两部分之间的空白距离l_blank
Bg2->l_blank = Max_blank - Grade
Bg1->next = Bg2Bg1->pri = Bg2
Bg2->next = Bg1Bg2->pri = Bg1
}
void InsertBg(Bg *p) //随机改变障碍物的y坐标,让空白通道有上下变化
{int temp
Bg *Bgs = (Bg*)malloc(sizeof(Bg))
Bgs->x = p->pri->x + Distance
Bgs->l_blank = Max_blank - Grade
srand((int)time(0)) //启动随机数发生器
temp = rand( ) //产生一个随机数并赋值给temp
if (temp % 2 == 0)
{if ((temp % 4 + p->pri->y + Max_blank - Grade)<21)
Bgs->y = p->pri->y + temp % 4
else Bgs->y = p->pri->y
}
else
{if ((p->pri->y - temp % 4)>2)Bgs->y = p->pri->y - temp % 4
else Bgs->y = p->pri->y
}
Bgs->pri = p->priBgs->next = p
p->pri->next = Bgsp->pri = Bgs
}
void CreatBird( ) //建立小鸟的坐标(初始打印输出小鸟的位置)
{Bird->x = 41Bird->y = 10}
int CheckYN(Bg *q) //判断游戏结束与否(值为0是要结束,为1没有要结束)
{Bg *p = qint i = 0
while (++i <= 5)
{if (Bird->y>23)return 0
if (Bird->x == p->x&&Bird->y <= p->y)return 0
if ((Bird->x == p->x || Bird->x == p->x + 1 || Bird->x == p->x + 2) &&Bird->y == p->y)return 0
if (Bird->x == p->x&&Bird->y>p->y + p->l_blank)return 0
if ((Bird->x == p->x || Bird->x == p->x + 1 || Bird->x == p->x + 2) &&Bird->y == p->y + p->l_blank)
return 0
p = p->next
}
return 1
}
void Check_Bg(Bg *q) //核查开头的障碍物坐标是否在游戏区内
{Bg *p = qint i = 0, temp
while (++i <= 5)
{if (p->x>-4)p = p->next
else
{srand((int)time(0)) temp = rand()
if (temp % 2 == 0)
{if ((temp % 4 + p->y + Max_blank - Grade)<21)p->y = p->y + temp % 4
else p->y = p->yp->x = p->pri->x + Distance
p->l_blank = Max_blank - Grade
}
else
{if ((p->y - temp % 4)>2)p->y = p->y - temp % 4
else p->y = p->yp->x = p->pri->x + Distance
p->l_blank = Max_blank - Grade
}
}
}
}
void Prt_Bg(Bg *q) //打印输出障碍物(依据其x、y坐标进行相应输出)
{Bg *p = qint i = 0, k, j
while (++i <= 5)
{if (p->x>0 &&p->x <= 78)
{for (k = 2k<p->yk++){Position(p->x + 1, k)printf("■")printf("■")printf(" ")}
Position(p->x, p->y)
printf("■")printf("■")printf("■")printf(" ")
Position(p->x, p->y + p->l_blank)
printf("■")printf("■")printf("■")printf(" ")
k = k + p->l_blank + 1
for (kk <= 23k++){Position(p->x + 1, k)printf("■")printf("■")printf(" ")}
}
p = p->next
if (p->x == 0)
{for (j = 2j<p->yj++){Position(p->x + 1, j)printf(" ")printf(" ")}
Position(p->x + 1, p->y)
printf(" ")printf(" ")printf(" ")
Position(p->x + 1, p->y + Max_blank - Grade)
printf(" ")printf(" ")printf(" ")
j = j + Max_blank - Grade + 1
for (jj <= 22j++){Position(p->x + 1, j)printf(" ")printf(" ")}
}
}
}
void PrtBird( ) //打印输出小鸟
{Position(Bird->x, Bird->y - 1)printf(" ")
Position(Bird->x, Bird->y)printf("Ю")
Position(38, 2)printf("Score:%d", Score)
}
void Loop_Bg(Bg *q) //障碍物x坐标左移,并记录成绩
{Bg *p = qint i = 0
while (++i <= 5)
{p->x = p->x - 1p = p->next
if (Bird->x == p->x)
{Score += 1
if (Score % 4 == 0 &&Grade<4)Grade++
}
}
}
int main( )
{int i = 0int t
while (1)
{
Csh( )PrFK( )CreatBg( )
InsertBg(Bg1)InsertBg(Bg1)InsertBg(Bg1)
CreatBird( )
while (1)
{if (!CheckYN(Bg1))break
Check_Bg(Bg1)Prt_Bg(Bg1)
PrtBird( )Loop_Bg(Bg1)
Bird->y = Bird->y + 1
if (GetAsyncKeyState(VK_UP)) //按下了向上方向键
{Position(Bird->x, Bird->y - 1)printf(" ")
Bird->y = Bird->y - 4
}
Sleep(200) //程序延时200毫秒(数值大小决定游戏速度快慢)
i = 0
}
Position(6, 25)
printf("游戏结束! 请输入:0.退出 1.重玩")
scanf("%d",&t)
if (t==0)break
system("cls")Score = 0
}
return 0
}