『壹』 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++大師😄