導航:首頁 > 編程語言 > 拼圖代碼c

拼圖代碼c

發布時間:2025-06-24 16:11:28

『壹』 C語言源代碼是什麼

數字版「拼圖」游戲C源代碼:

#include<time.h>

#include<stdio.h>

#include<stdlib.h>

#include<conio.h>

#include<windows.h>

int i, j, r, k; //i、j、r用於循環, k存放隨機數值


int m, n; // m、n是當前空位的下標, t標記排序是否成功

int a[4][4]; //存儲4×4共16個數字的數組

void show(void); //輸出數組表格

void csh(void); //初始化界面

int yes(void); //判斷排序是否成功

void up(void); //數字向上移動到空位(空位則下移)

void down(void); //數字向下移

void left(void); //數字向左移

void rght(void); //數字向右移

void inkey(void); //按鍵操作

void gtxy(int x, int y) ; //控制游標移動的函數

int main(void)

{ while(1)

{csh( );

while(1)

{ inkey();

show();

if ( yes( ) )

{gtxy(6,12); printf("你成功了! 再來一局y/n?"); break;}

}

if(getch( )== ʹnʹ)break;

}

return 0;

}

void csh(void)

{r=0;

CONSOLE_CURSOR_INFO cursor_info={1,0}; //以下兩行是隱藏游標的設置

SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info);

for(i=0;i<4;i++) //給數組a依序賦值

for(j=0;j<4;j++)
{ if (i==3 && j==3) a[i][j]=0;
else a[i][j]=1+r++;
}

a[3][3]=a[1][1]; a[1][1]=0; //把a[3][3]與a[1][1]的值交換一下

m=1; n=1;

srand((unsigned)time(0)); //初始化隨機數發生器

for(r=0;r<500;r++) //將數組各值打亂
{k=rand( )%(4); //取0-3隨機數,分別代表上下左右四個方向
switch(k)
{ case 0: { up( );break; }
case 1: {down( );break; }
case 2: {left( );break; }
case 3: {rght( ); break; }
}
}

printf(" 數字拼圖");

printf(" ┌──────┬──────┬──────┬──────┐");

printf(" │ │ │ │ │");

printf(" ├──────┼──────┼──────┼──────┤");

printf(" │ │ │ │ │");

printf(" ├──────┼──────┼──────┼──────┤");

printf(" │ │ │ │ │");

printf(" ├──────┼──────┼──────┼──────┤");

printf(" │ │ │ │ │");

printf(" └──────┴──────┴──────┴──────┘");
show( );
}

void show(void)

{for(i=0;i<4;i++)

for(j=0;j<4;j++) //gtxy(7*j+9, 2*i+4)是游標到指定位置輸出數字

{gtxy(7*j+9,2*i+4); if(a[i][j]==0)printf(" │");

else if(a[i][j]>9)printf(" %d │",a[i][j]);

else printf(" %d │",a[i][j]);

}

}

void inkey(void)

{ int key;

key=getch( );
switch(key)
{ case 72: { up( ); break;}
case 80: {down( ); break; }
case 75: {left( ); break; }
case 77: {rght( );break;}
}
}

void up(void)

{ if (m!=3) //移動時要考慮空位"0"是否已經在邊界
{ a[m][n]=a[m+1][n]; m++; a[m][n]=0; }
}


void down(void)

{ if (m!=0)
{a[m][n]=a[m-1][n]; m--; a[m][n]=0; }
}

void left(void)

{ if (n!=3)
{ a[m][n]=a[m][n+1]; n++; a[m][n]=0;}
}
void rght(void)

{ if (n!=0)
{ a[m][n]=a[m][n-1]; n--; a[m][n]=0; }
}

int yes(void)

{ r=0;
for(i=0;i<4;i++)
for(j=0;j<4;j++)
{ if (a[i][j]!=1+r++) return (r==16)?1:0; }
}

void gtxy(int x, int y) //控制游標移動的函數

{ COORD coord;

coord.X = x;

coord.Y = y;

SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);

}

『貳』 求用C++編寫一個小游戲程序代碼,如:俄羅斯方塊,掃雷,拼圖,貪吃蛇之類的……謝了……

我給你2個貪吃蛇c++代碼

(1):

#include <stdio.h>

#include <windows.h>

#include <time.h>

#include <conio.h>

#include <stdlib.h>

//方向鍵的ASCLL值:上72,左75,右77,下80

//背景顏色的代碼: 0=黑色 1藍色 2 綠色 3湖藍色 4紅色 5紫色 6黃色 7白色 8灰色 9淡藍色

//**改變當前游標方塊的背景顏色和字體顏色**//

void BackGround(unsigned int ForeColor = 7, unsigned int BackGroundColor = 0) {

HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE); //獲取控制台的句柄

SetConsoleTextAttribute(handle, ForeColor + BackGroundColor * 0x10);//改變當前游標的背景和字體顏色

}

//**改變游標的位置**//

void gotoxy(int x, int y) {8

HANDLE handle;

COORD coord; //獲取坐標軸結構體

coord.X = x;

coord.Y = y;

handle = GetStdHandle(STD_OUTPUT_HANDLE); //獲取控制台句柄,值為-11

SetConsoleCursorPosition(handle, coord); //移動游標到x,y處

}

//**初始化地圖數據**//

void restart(int bk[20][20], int look[4], int move[20][20]) {

//bk為總的地圖數據記錄整個地圖,為1時表示牆體,為2時表示果實,為3時表示蛇

//look記錄數據,為0時表示朝向,為1時表示長度,為3時表示勝負情況,為4表示分數

//move記錄蛇走過的路程,用來列印蛇時判斷用

int pp, qq; //用來記錄獲取的隨機坐標

//接下來要初始化整個地圖//

for(int i=0;i<=16;i++)

for (int j = 0; j <= 16; j++) {

if (i == 0 || i == 16 || j == 0 || j == 16) bk[i][j] = 1;//1表示牆體

else bk[i][j] = 0; //0表示什麼都沒有

move[i][j] = 0; //該數組用來記錄蛇移動的軌跡

}

//將蛇初始化在8,8坐標上

bk[8][8] = 3;

move[8][8] = 1;//則此時8,8,上的軌跡就應該記錄為1

move[0][0] = 1;//用此來記錄步數

pp = rand() % 15 + 1;//范圍是1-15

qq = rand() % 15 + 1;

bk[pp][qq] = 2;//表示這個位置有果實了

look[0] = 1;//表示朝向,向上

look[1] = 1;//表示長度

look[2] = 0;//當為1是表示失敗

look[3] = 0;//記錄得分

//接下來要繪制地圖//

for(int i=0;i<=16;i++)

for (int j = 0; j <= 16; j++) {

gotoxy(i * 2, j);//游標移動,每個游標都是矩形

switch (bk[i][j]) {

case 0:

BackGround(0, 0);

break;//如果沒有東西列印黑色

case 1:

BackGround(0, 1);

break;//牆列印藍色

case 2:

BackGround(0, 2);

break;//果實列印綠色

case 3:

BackGround(0, 3);

break;//蛇列印湖藍色

default:

break;

}

printf(" ");//地圖中直接就是塗空格符

}

//接下來要顯示積分//

gotoxy(35, 0);

BackGround(7, 0);//用白字黑底列印

printf("現在得分是:%d,請再接再厲!^_^", look[2]);

}

//**運動主體**//

void map(int bk[20][20], int look[4], int xy[2], int move[20][20]) {

//bk是地圖信息,look作數據記錄,xy記錄坐標,move記錄蛇的運動軌跡

int b[10], qq=0, pp=0;//b用來吸收輸入,qq和pp用來隨機初始化果實坐標

if (kbhit()) {//記錄按下的是哪個方向鍵

b[0] = getch();//用b來記錄

if (b[0] == 224) b[0] = getch();//如果為224表示為方向鍵,但是要再一次獲取才行

if (b[0] == 72 && look[0] != 2)

//如果輸入的為上並且朝向不為下

look[0] = 1;

if (b[0] == 80 && look[0] != 1)

look[0] = 2;

if (b[0] == 75 && look[0] != 4)

look[0] = 3;

if (b[0] == 77 && look[0] != 3)

look[0] = 4;

}

switch (look[0]) {

case 1:

//往上走

xy[1]--;

break;

case 2:

//往下走

xy[1]++;

break;

case 3:

//往左走

xy[0]--;

break;

case 4:

//往右走

xy[0]++;

break;

}

//接下來蛇就開始走動了//

move[0][0]++;//蛇的步數加一

move[xy[0]][xy[1]] = move[0][0];//記錄當前格子中蛇的軌跡

gotoxy(35, 2);

BackGround(7, 0);

printf("橫坐標:%d,縱坐標:%d", xy[0],xy[1]);

gotoxy(xy[0] * 2, xy[1]);//這里蛇頭就往前移動了

BackGround(0, 3);//與蛇體一個顏色

printf(" ");

//如果吃了果實//

if (bk[xy[0]][xy[1]] == 2) {

look[2]++;//分數加一

look[1]++;//長度加一

//更新分數

gotoxy(35, 0);

BackGround(7, 0);

printf("現在得分是:%d,請再接再厲!^_^", look[2]);

while (bk[pp][qq] != 0) {

pp = rand() % 15 + 1;

qq = rand() % 15 + 1;

}

bk[pp][qq] = 2;//將這個地方變為果實

gotoxy(pp * 2, qq);

BackGround(0, 2);

printf(" ");

}

//如果撞了牆或者自己//

if (bk[xy[0]][xy[1]] == 1 || bk[xy[0]][xy[1]] == 3) {

look[3] = 1;//表示已經輸了

gotoxy(6, 6);

BackGround(7, 0);

printf("你輸了,最後得分:%d", look[2]);

}

bk[xy[0]][xy[1]] = 3;//使這個位置變成蛇

//接下來要檢測蛇然後刷新蛇的位置//

for(int i=0;i<=16;i++)

for (int j = 0; j <= 16; j++) {

if (move[i][j] == move[xy[0]][xy[1]] - look[1]){

//如果符合這個條件,則表示蛇已經移動出這個位置了

//要刪除這個位置的蛇尾巴

//一次只有一個方塊會符合要求吧?

bk[i][j] = 0;

gotoxy(i * 2, j);

BackGround(0, 0);

printf(" ");

break;//一次只找一個

}

}

end:;

}

int main() {

int bk[20][20], xy[2], move[20][20], look[4];

xy[1] = xy[0] = 8;

srand((unsigned) time(NULL));//初始化隨機種子

system("pause");

restart(bk, look, move);

while (look[3] == 0) {

Sleep(200);//休眠400ms一次

map(bk, look, xy, move);

}

system("pause");

printf("游戲結束,謝謝遊玩!^_^");

return 0;

}

(2):

#include <stdio.h>

#include <windows.h>

#include<conio.h>

#include <stdlib.h>

#include<time.h>

#define X 23//地圖的x軸

#define Y 75//地圖的y軸

#define UP 0

#define DOWN 1

#define LEFT 2

#define RIGHT 3

#define WAIT_TIME 200//等待蛇刷新的時間,可以說是速度 修改可變速

int map_0[X][Y];//地圖

int Snake[X*Y][2]; // 蛇

int Slength; //蛇的長度

int direction;

int score=0;

bool pdEatFood=false;

void csh();

void huaMap();

void huaSnake();

void gotoxy(int x,int y);

void move();

void intokey();

int check(int x,int y);

void putfood();

bool gameover();

void dy_fs();

int main()

{

csh();

huaMap();

putfood();

while(1)

{

huaSnake();

Sleep(WAIT_TIME);

intokey();

move();

dy_fs();

if(gameover())

{

system("cls"); //清除屏幕內容

printf("Game Over ");

system("pause");

getchar();

break;

}

if(map_0[Snake[0][0]][Snake[0][1]]==-1)

{

map_0[Snake[0][0]][Snake[0][1]]=0;

pdEatFood=true;

putfood();

score+=10;

}

}

return 0;

}

void csh()//初始化

{

srand((unsigned)time(NULL)); //設置種子為現在的時間

Slength=4;

gotoxy(0,0);

CONSOLE_CURSOR_INFO cursor_info = {1, 0}; //清除游標

SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);

int x,y;

Snake[0][0]=X/2;

Snake[0][1]=Y/2;

for(x=0;x<X;x++){

map_0[x][0]=1;

map_0[x][Y-1]=1;

}

for(y=1;y<Y-1;y++){

map_0[0][y]=1;

map_0[X-1][y]=1;

}

for(x=1;x<4;x++){ //初始化蛇的坐標

Snake[x][0]=Snake[0][0]+x;

Snake[x][1]=Snake[0][1];

}

direction=UP;

}

void huaMap()//畫地圖

{

int x,y;

for(x=0;x<X*1.01;x++){

for(y=0;y<Y*1.01;y++){

if(map_0[x][y]==1){

printf("#");

}

if(map_0[x][y]==0){

printf(" ");

}

}

printf(" ");

}

}

void huaSnake()//畫蛇

{

int x;

for(x=0;x<Slength;x++)

{

gotoxy(Snake[x][0],Snake[x][1]);

printf("@");

}

}

void gotoxy(int i,int j)//移動游標

{

COORD position={j,i};

SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),position);

}

void move()

{

int i;

gotoxy(Snake[Slength-1][0],Snake[Slength-1][1]);//擦除尾巴

printf(" ");

for(i=Slength-1;i>0;i--) //從尾巴開始,每一個點的位置等於它前面一個點的位置

{

Snake[i][0]=Snake[i-1][0];

Snake[i][1]=Snake[i-1][1];

}

switch(direction)

{

case UP:

Snake[0][0]--;

break;

case DOWN:

Snake[0][0]++;

break;

case LEFT:

Snake[0][1]--;

break;

case RIGHT:

Snake[0][1]++;

break;

}

if(pdEatFood){

Slength++;

pdEatFood=false;

}

}

void intokey()

{

if(kbhit()!=0) //kbhit()函數 檢查當前是否有鍵盤輸入,若有則返回一個非0值,否則返回0

{

char in;

while(!kbhit()==0) //如果玩家輸入了多個按鍵,以最後一個按鍵為准

in=getch();

switch(in)

{

case 'w':

case 'W':

if(direction!=DOWN) //防止縮頭

direction=UP;

break;

case 's':

case 'S':

if(direction!=UP)

direction=DOWN;

break;

case 'a':

case 'A':

if(direction!=RIGHT)

direction=LEFT;

break;

case 'd':

case 'D':

if(direction!=LEFT)

direction=RIGHT;

break;

case 'p':

case 'P':

gotoxy(X,0);

system("pause");

gotoxy(X,0);

printf(" "); // 消去下面的按任意鍵繼續

break;

}

}

}

int check(int ii,int jj){// 檢查是否能投放食物

if(map_0[ii][jj]==1)

return 0;

if(ii==0 || jj==0 || ii==X-1 || jj==Y-1)

return 0;

int i;

for(i=0;i<Slength;i++){

if(ii==Snake[i][0] && jj==Snake[i][1])

return 0;

}

return 1;

}

void putfood()

{

int i,j;

do{

i=rand()%X;

j=rand()%Y;

}while(check(i,j)==0);

map_0[i][j]=-1;

gotoxy(i,j);

printf("$");

}

bool gameover()

{

bool isgameover=false;

int sX,sY;

sX=Snake[0][0],sY=Snake[0][1];

if(sX==0 || sX==X-1 || sY==0 || sY==Y-1)

isgameover=true;

int i;

for(i=1;i<Slength;i++){

if(sX==Snake[i][0] && sY==Snake[i][1])

isgameover=true;

}

return isgameover;

}

void dy_fs()

{

gotoxy(X,0);

printf("(c)Geek------2018.1.22");

gotoxy(X+1,0);

printf("最終得分: %d",score);

}

管慶帆c/c++大師😄
閱讀全文

與拼圖代碼c相關的資料

熱點內容
什麼是蜂窩數據蜂窩數據又在哪裡 瀏覽:945
買網路交換機要什麼資質 瀏覽:938
發文件到qq郵箱怎麼發送郵件 瀏覽:345
微信變態gif圖片大全 瀏覽:759
水星無線客戶端激活配置文件 瀏覽:901
ps水面倒影教程 瀏覽:994
2017年蘋果5c還能用嗎 瀏覽:281
怎麼用微信玩壞小三 瀏覽:877
qq再見表情的新含義 瀏覽:725
ios511升級 瀏覽:236
為什麼數據能存在磁碟 瀏覽:707
壓縮視頻用什麼格式的文件 瀏覽:925
excel2003文件怎麼加密 瀏覽:682
美劇野獸家族在哪個app 瀏覽:832
linux給用戶分配文件夾 瀏覽:379
怎麼把編程界面改成黑色的 瀏覽:989
大數據新安全思維三大模塊是什麼 瀏覽:689
ps濾鏡文件夾在哪 瀏覽:636
jpa配置文件名 瀏覽:258
黑衣劍士有兩個版本 瀏覽:355

友情鏈接