2048
本文最后更新于 2023-12-09,文章内容可能已经过时。
2048
所做的第一个真正意义上的大项目.大一上学期使用C语言完成.
第一次体会到撰写大量,复杂代码的成就感和满足感.
#include <stdio.h>
#include <stdlib.h>
#include<conio.h>
#include <time.h>
void shuchu(int zu[][4])
{
int hang,lie;
for(hang=0;hang<4;hang++)
{
for(lie=0;lie<4;lie++)
{
printf("%5d",zu[hang][lie]);
}
printf("\n");
printf("\n");
}
}
void jieshu(int zu[][4])
{
int hang,lie;
for(hang=0;hang<4;hang++)
{
for(lie=0;lie<4;lie++)
{
if(zu[hang][lie]==2048)
{
system("cls");
printf("游戏胜利!!!!!\n");
printf("我艹,兄弟牛逼!!!!!\n");
printf("这么垃圾的游戏你都玩完了!!!!!\n");
printf("拜拜~~~~~\n");
printf("PS:");
printf("第一个游戏,设计于2021.11.15\n");
printf("出品 熊的抒情进攻");
exit(0);
}
}
}
}
void duiqi(int zu[][4],int shuru)
{
int hang,lie,i,j,swap;
if(shuru==119)
{
for(lie=0; lie<4;lie++) {
j=0;
for(i=0; i<24; i++,j++) {
if(zu[j][lie]==0&&zu[j+1][lie]!=0) {
swap=zu[j][lie];
zu[j][lie]=zu[j+1][lie];
zu[j+1][lie]=swap;
}
if(j==2)j=-1;
}
}
}
if(shuru==115)
{
for(lie=0; lie<4;lie++) {
j=0;
for(i=0; i<24; i++,j++) {
if(zu[j][lie]!=0&&zu[j+1][lie]==0) {
swap=zu[j][lie];
zu[j][lie]=zu[j+1][lie];
zu[j+1][lie]=swap;
}
if(j==2)j=-1;
}
}
}
if(shuru==97)
{
for(hang=0; hang<4;hang++)
{
j=0;
for(i=0; i<24; i++,j++)
{
if(zu[hang][j]==0&&zu[hang][j+1]!=0)
{
swap=zu[hang][j];
zu[hang][j]=zu[hang][j+1];
zu[hang][j+1]=swap;
}
if(j==2)j=-1;
}
}
}
if(shuru==100)
{
for(hang=0; hang<4;hang++) {
j=0;
for(i=0; i<24; i++,j++)
{
if(zu[hang][j]!=0&&zu[hang][j+1]==0)
{
swap=zu[hang][j];
zu[hang][j]=zu[hang][j+1];
zu[hang][j+1]=swap;
}
if(j==2)j=-1;
}
}
}
}
void hebing(int zu[][4],int shuru)
{
int hang,lie,i;
if(shuru==119)
{
for(lie=0; lie<4; lie++) {
for(i=0; i<3; i++) {
if(zu[i][lie]==zu[i+1][lie]) {
zu[i][lie]=zu[i][lie]*2;
zu[i+1][lie]=0;
}
}
}
}
if(shuru==115)
{
for(lie=0; lie<4; lie++) {
for(i=0; i<3; i++) {
if(zu[i][lie]==zu[i+1][lie]) {
zu[i+1][lie]=zu[i][lie]*2;
zu[i][lie]=0;
}
}
}
}
if(shuru==97)
{
for(hang=0; hang<4; hang++) {
for(i=0; i<3; i++) {
if(zu[hang][i]==zu[hang][i+1]) {
zu[hang][i]=zu[hang][i]*2;
zu[hang][i+1]=0;
}
}
}
}
if(shuru==100)
{
for(hang=0; hang<4; hang++) {
for(i=0; i<3; i++) {
if(zu[hang][i]==zu[hang][i+1]) {
zu[hang][i+1]=zu[hang][i]*2;
zu[hang][i]=0;
}
}
}
}
}
void suijishu(int zu[][4])
{
srand((unsigned)time(NULL));
int sui1,sui2,hang,lie,count=0;
int sui[16];
sui1=rand();
if(sui1%2==0)sui1=2;
if(sui1%2==1)sui1=4;
for(hang=0;hang<4;hang++)
{
for(lie=0;lie<4;lie++)
{
if(zu[hang][lie]==0)
{
sui[count]=hang*10+lie;
count++;
}
}
}
sui2=rand()%count;
hang=sui[sui2]/10;
lie=sui[sui2]%10;
zu[hang][lie]=sui1;
}
void chuli(int zu[][4],int shuru)
{
duiqi(zu,shuru);
hebing(zu,shuru);
jieshu(zu);
duiqi(zu,shuru);
suijishu(zu);
}
int main()
{
int ping=1,pan1,pan2,shuru,hang,lie;
int zu[4][4];
for(hang=0;hang<4;hang++)
{
for(lie=0;lie<4;lie++)
{
zu[hang][lie]=0;
}
}
suijishu(zu);
for(;;)
{
if(ping==1)
{
system("cls");
printf("****************************\n");
printf("* *\n");
printf("* 欢迎来到2048小游戏! *\n");
printf("* >开始游戏 *\n");
printf("* 游戏说明 *\n");
printf("* 退出游戏 *\n");
printf("* *\n");
printf("****************************\n");
pan1=getch();
if(pan1==13)
{
for(;;)
{
system("cls");
shuchu(zu);
shuru=getch();
chuli(zu,shuru);
}
}
else {
pan2=getch();
switch(pan2)
{
case 72: {
ping = 3;
continue;
}
case 80: {
ping = 2;
continue;
}
}
}
}
if(ping==2)
{
system("cls");
printf("****************************\n");
printf("* *\n");
printf("* 欢迎来到2048小游戏! *\n");
printf("* 开始游戏 *\n");
printf("* >游戏说明 *\n");
printf("* 退出游戏 *\n");
printf("* *\n");
printf("****************************\n");
pan1=getch();
if(pan1==13) {
system("cls");
printf("1.手指向一个方向滑动,所有格子会向那个方向运动。(请使用wasd键)\n");
printf("2.相同数字的两个格子,相撞时数字会相加。\n");
printf("3.每次滑动时,空白处会随机刷新出一个数字的格子(2或4)。\n");
printf("4.当界面不可运动时(当界面全部被数字填满时),游戏结束。\n");
printf("5.当界面中最大数字是2048时,游戏胜利。\n");
printf("6.按回车键返回\n");
if(getch()==13)
{
ping = 2;
continue;
}
}
else {
pan2=getch();
switch(pan2)
{
case 72: {
ping = 1;
continue;
}
case 80: {
ping = 3;
continue;
}
}
}
}
if(ping==3)
{
system("cls");
printf("****************************\n");
printf("* *\n");
printf("* 欢迎来到2048小游戏! *\n");
printf("* 开始游戏 *\n");
printf("* 游戏说明 *\n");
printf("* >退出游戏 *\n");
printf("* *\n");
printf("****************************\n");
pan1=getch();
if(pan1==13) {
exit(0);
}
else {
pan2=getch();
switch(pan2)
{
case 72: {
ping = 2;
continue;
}
case 80: {
ping = 1;
continue;
}
}
}
}
}
return 0;
}
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果