求助大神呀
#include <stdio.h>
#include <conio.h>
#include <windows.h>
#include <math.h>
#include <time.h>
//定義全域變數
int step=0;
int score=0;
long int Time;
int Board[4][4]={
0,0,0,0,
0,0,0,0,
0,0,0,0,
0,0,0,0};
HANDLE hOut;
//函式宣告
void go(int x,int y); //設定坐標位置
int color(int c); //設定文字顏色
int Tcolor(int i); //根據不同數字修改顏色
void drawTheGameBoard(); //繪制游戲界面
int *add(int item[]); //合并數字
int ifMove(int item[]); //判斷是否能夠移動數字
void Gstart(); //開始游戲
void Regame(); //重新游戲
int if2n(int x); //判斷是否為2的n次方
int up(); //判斷是否能夠上移
int down(); //判斷是否能夠下降
int right(); //判斷是否能夠右移
int left(); //判斷是否能夠左移
int BoardMax(); //回傳棋盤最大值
int Faile(); //判斷是否失敗
int Win(); //判斷是否勝利
int Control(int key); //設定鍵盤操作
void close(); //關閉游戲
void title(); //繪制標題
void choice(); //制作選擇框
void picture(); //字符畫;
void rule(); //游戲規則
//獲取坐標位置//
void go(int x,int y)
{
COORD c;
c.X =x;
c.Y =y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),c);
}
//設定文字顏色//
int color(int c)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),c);
return 0;
}
//選單選項//
void choice()
{
int n;
int i,j=1;
color(13);
go(32,8);
printf("Let's play a game");
color(14);
for(i=9;i<=20;i++)
{
for(j=15;j<=60;j++)
{
go(j,i);
if(i==9||i==20)
{
printf("=");
}
else if(j==15||j==59)
{
printf("||");
}
}
}
color(12);
go(25,12);
printf("1.開始游戲");
go(40,12);
printf("2.游戲規則");
go(25,16);
printf("3.退出游戲");
color(5);
go(21,22);
printf("請選擇[1,2,3]:[ ]\b\b");
scanf("%d",&n);
switch(n)
{
case 1:
system("cls");
Gstart();
break;
case 2:
break;
case 3:
exit(0);
break;
}
}
//繪制游戲棋盤//
void drawTheGameBoard()
{
int i,j,k;
color(14);
for(j=2;j<=22;j+=5)
{
go(15,j);
for(k=1;k<42;k++)
{
printf("-");
}
printf("\n");
}
for(i=3;i<7;i++)
{
go(15,i);
printf("| | | | |");
}
for(i=8;i<12;i++)
{
go(15,i);
printf("| | | | |");
}
for(i=13;i<17;i++)
{
go(15,i);
printf("| | | | |");
}
for(i=18;i<22;i++)
{
go(15,i);
printf("| | | | |");
}
color(11);
go(16,1);
printf("游戲得分: %ld",score);
color(13);
go(42,1);
printf("執行步數: %ld",step);
color(10);
go(44,23);
printf("用時:%d s",time(NULL)-Time);
}
//根據不同數字修改顏色//
int Tcolor(int number)
{
switch(number)
{
case 2:
return color(12);
break;
case 4:
return color(11);
break;
case 8:
return color(10);
break;
case 16:
return color(14);
break;
case 32:
return color(6);
break;
case 64:
return color(5);
break;
case 128:
return color(4);
break;
case 256:
return color(3);
break;
case 512:
return color(15);
break;
case 1024:
return color(9);
break;
case 2048:
return color(7);
break;
}
return 0;
}
//合并數字//
int *add(int item[])
{
int i,j=0;
int tep[4]={0,0,0,0};
int tmp[4]={0,0,0,0};
for(i=0;i<4;i++)
{
if(item[i]!=0)
{
tep[j++]=item[i];
}
}
for(i=0;i<4;i++)
{
if(tep[i]==tep[i+1])
{
tep[i]*=2;
tep[i+1]=0;
score=score+tep[i];
}
}
j=0;
for(i=0;i<4;i++)
{
if(tep[0]!=0)
{
tmp[j++]=tep[i];
}
}
return (int *)(&tmp);
}
//判斷能否移動數字//
int ifMove(int item[])
{
int i=0;
for(i=0;i<3;i++)
{
if(item[i]!=0&&item[i]==item[i+1])
{
return 1;
}
if(item[i]==0&&item[i+1]!=0)
{
return 1;
}
}
return 0;
}
//判斷是否為2的n次方
int if2n(int x)
{
int flag=0;
int n;
for(n=1;n<=11;n++)
{
if(x==pow(2,n))
{
flag=1;
}
}
return flag;
}
//判斷是否能夠上移
int up()
{
int i,j;
int flag = 0;
for(j=0;j<4;j++)
for(i=0;i<3;i++)
{
if((if2n(Board[i][j]+Board[i+1][j])==1)&&Board[i+1][j])
{
flag =1;
}
}
return flag;
}
//判斷是否能夠下降//
int down()
{
int i,j;
int flag = 0;
for(j=0;j<4;j++)
for(i=3;i>0;i--)
{
if((if2n(Board[i][j]+Board[i-1][j])==1)&&Board[i-1][j])
{
flag =1;
}
}
return flag;
}
//判斷是否能夠右移//
int right()
{
int i,j;
int flag=0;
for(i=0;i<4;i++)
for(j=3;j>0;j--)
{
if((if2n(Board[i][j]+Board[i][j-1])==1)&&Board[i][j-1])
{
flag=1;
}
}
return flag;
}
//判斷是否能夠左移//
int left()
{
int i,j;
int flag=0;
for(i=0;i<4;i++)
for(j=0;j<3;j++)
{
if((if2n(Board[i][j]+Board[i][j+1])==1)&&Board[i][j+1])
{
flag=1;
}
}
return flag;
}
//回傳棋盤最大值//
int BoardMax()
{
int max=Board[0][0];
int i,j;
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
if(Board[i][j]>max)
{
max=Board[i][j];
}
}
}
return max;
}
//設定鍵盤操作//
int Control(int key)
{
int i,j;
int *p;
int tp[4]={0,0,0,0};
switch(key)
{
case 72:
for(i=0;i<4;i++)
{
tp[0]=Board[0][i];
tp[1]=Board[1][i];
tp[2]=Board[2][i];
tp[3]=Board[3][i];
p=add(tp);
if(!ifMove(tp))
{
j++;
}
Board[0][i]=p[0];
Board[1][i]=p[1];
Board[2][i]=p[2];
Board[3][i]=p[3];
}
return j !=4;
case 80:
j=0;
for(i=0;i<4;i++)
{
tp[0]=Board[3][i];
tp[1]=Board[2][i];
tp[2]=Board[1][i];
tp[3]=Board[0][i];
p=add(tp);
if(!ifMove(tp))
{
j++;
}
Board[3][i]=p[0];
Board[2][i]=p[1];
Board[1][i]=p[2];
Board[0][i]=p[3];
}
return j !=4;
case 75:
j=0;
for(i=0;i<4;i++)
{
tp[0]=Board[i][0];
tp[1]=Board[i][1];
tp[2]=Board[i][2];
tp[3]=Board[i][3];
p=add(tp);
if(!ifMove(tp))
{
j++;
}
Board[i][0]=p[0];
Board[i][1]=p[1];
Board[i][2]=p[2];
Board[i][3]=p[3];
}
return j !=4;
case 77:
j=0;
for(i=0;i<4;i++)
{
tp[0]=Board[i][3];
tp[1]=Board[i][2];
tp[2]=Board[i][1];
tp[3]=Board[i][0];
p=add(tp);
if(!ifMove(tp))
{
j++;
}
Board[i][3]=p[0];
Board[i][2]=p[1];
Board[i][1]=p[2];
Board[i][0]=p[3];
}
return j !=4;
}
}
//開始游戲//
void Gstart()
{
system("cls");
int i,j=0;
Time=time(NULL);
drawTheGameBoard();
int a,b;
srand(time(NULL));
do{
a=rand()%4;
b=rand()%4;
}while(Board[a][b]!=0);
if(rand()%4==0)
{
Board[a][b]=4;
}
else
{
Board[a][b]=2;
}
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
if(Board[i][j]==0)
{
continue;
}
go(15+j*10+5,2+i*5+3);
int c=Board[i][j];
Tcolor(c);
printf("%d",c);
}
}
while(1)
{
while(kbhit())
{
if(!Control(getch()))
{
continue;
}
drawTheGameBoard();
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
if(Board[i][j]==0)
{
continue;
}
go(15+j*10+5,2+i*5+3);
int c=Board[i][j];
Tcolor(c);
printf("%d",c);
}
}
do
{
a=rand()%4;
b=rand()%4;
}while(Board[a][b]!=0);
if(rand()%4==0)
{
Board[a][b]=4;
}
else
{
Board[a][b]=2;
}
go(15+j*10+5,2+i*5+3);
int c=Board[a][b];
Tcolor(c);
printf("%d",c);
step++;
}
}
if(Win()+Faile()!=0)
{
int n;
color(12);
go(20,20);
printf("Again---------------1");
go(45,20);
printf("EXIT----------------2");
color(11);
go(43,21);
scanf("%d",&n);
switch(n)
{
case 1:
Regame();
break;
case 2:
exit(0);
break;
}
}
}
//重新游戲//
void Regame()
{
system("cls");
score=0;
step=0;
memset(Board,0,16*sizeof(int));
Gstart();
}
int main()
{
title();
choice();
return 0;
}
(有些特殊字符他不讓放出來,所以這個代碼不算很完整,但整個的游戲主體都還在的)
大神幫我看看我這里哪里有問題呀
為什么一直出現這種情況
uj5u.com熱心網友回復:
這種情況一般是陣列沒賦值或越界uj5u.com熱心網友回復:
嗯嗯,好,我仔細看看哈,謝謝你啦
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/98901.html
標籤:C語言
上一篇:請教unsigned char 指標和char指標和有啥區別?謝謝
下一篇:在delphi7中我想實作具有多個相同屬性的查詢,應該怎么寫代碼?這是我寫的代碼,不過選出來的是或的關系!我的代碼如下:
