求C语言编写的壁球小游戏的源代码,谢谢。

求C语言编写的壁球小游戏的源代码,谢谢。,第1张

速度和 接板 长度不能改

所以比较难玩

#include "graphicsh"

#include "stdioh"

#include "conioh" /所需的头文件/

int on; /声明具有开关作用的全局变量/

static int score; /声明静态的记分器变量/

/ 定义开始界面函数/

int open()

{

setviewport(100,100,500,380,1); /设置图形窗口区域/

setcolor(4); /设置作图色/

rectangle(0,0,399,279); /以矩形填充所设的图形窗口区域/

setfillstyle(SOLID_FILL,7); /设置填充方式/

floodfill(50,50,4); /设置填充范围/

setcolor(8);

settextstyle(0,0,9); /文本字体设置/

outtextxy(90,80,"BALL"); /输出文本内容/

settextstyle(0,0,1);

outtextxy(110,180,"version 10");

outtextxy(110,190,"made by ddt");

setcolor(128);

settextstyle(0,0,1);

outtextxy(120,240,"Press any key to continue");

}

/定义退出界面函数/

int quitwindow()

{

char s[100]; /声明用于存放字符串的数组/

setviewport(100,150,540,420,1);

setcolor(YELLOW);

rectangle(0,0,439,279);

setfillstyle(SOLID_FILL,7);

floodfill(50,50,14);

setcolor(12);

settextstyle(0,0,8);

outtextxy(120,80,"End");

settextstyle(0,0,2);

outtextxy(120,200,"quit Y/N");

sprintf(s,"Your score is:%d",score);/格式化输出记分器的值/

outtextxy(120,180,s);

on=1; /初始化开关变量/

}

/主函数/

main()

{

int gdriver,gmode;

gdriver=DETECT; /设置图形适配器/

gmode=0; /设置图形模式/

registerbgidriver(EGAVGA_driver);/ 注册BGI驱动后可以不需要BGI文件的支持运行 /

initgraph(&gdriver,&gmode,"");

setbkcolor(14);

open(); /调用开始界面函数/

getch(); /暂停/

while(1) /此大循环体控制游戏的反复重新进行/

{

int driver,mode,l=320,t=400,r,a,b,dl=5,n,x=200,y=400,r1=10,dx=-2,dy=-2;/初始化小球相关参数/

int left[100],top[100],right[100],bottom[100],i,j,k,off=1,m,num[100][100];/方砖阵列相关参数/

static int pp;

static int phrase; /一系列起开关作用的变量/

int oop=15;

pp=1;

score=0;

driver=DETECT;

mode=VGA;

registerbgidriver(EGAVGA_driver);

initgraph(&driver,&mode,"");

setbkcolor(10);

cleardevice(); /图形状态下清屏/

clearviewport(); /清除现行图形窗口内容/

b=t+6;

r=l+60;

setcolor(1);

rectangle(0,0,639,479);

setcolor(4);

rectangle(l,t,r,b);

setfillstyle(SOLID_FILL,1);

floodfill(l+2,t+2,4);

for(i=0,k=0;i<=6;i++) /此循环绘制方砖阵列/

{

top[i]=k;

bottom[i]=top[i]+20;

k=k+21;

oop--;

for(j=0,m=0;j<=7;j++)

{

left[j]=m;

right[j]=left[j]+80;

m=m+81;

setcolor(4);

rectangle(left[j],top[i],right[j],bottom[i]);

setfillstyle(SOLID_FILL,j+oop);

floodfill(left[j]+1,top[i]+1,4);

num[i][j]=pp++;

}

}

while(1) /此循环控制整个动画/

{

while(!kbhit())

{

x=x+dx; /小球运动的圆心变量控制/

y=y+dy;

if(x+r1>r||x+r1<r)

{ phrase=0;}

if((x-r1<=r||x+r1<=r)&&x+r1>=l)

{

if(y<t)

phrase=1;

if(y+r1>=t&&phrase==1)

{dy=-dy;y=t-1-r1;}

}

if(off==0)

continue;

for(i=0;i<=6;i++) /此循环用于判断、控制方砖阵列的撞击、擦除/

for(j=0;j<=7;j++)

{

if((x+r1<=right[j]&&x+r1>=left[j])||(x-r1<=right[j]&&x-r1>=left[j]))

{

if(( y-r1>top[i]&&y-r1<=bottom[i])||(y+r1>=top[i]&&y+r1<=bottom[i] ))

{

if(num[i][j]==0)

{continue; }

setcolor(10);

rectangle(left[j],top[i],right[j],bottom[i]);

setfillstyle(SOLID_FILL,10);

floodfill(left[j]+1,top[i]+1,10);

dy=-dy;

num[i][j]=0;

score=score+10;

printf("%d\b\b\b",score);

}

}

if((y+r1>=top[i]&&y+r1<=bottom[i])||(y-r1>=top[i]&&y-r1<=bottom[i]))

{

if((x+r1>=left[j]&&x+r1<right[j])||(x-r1<=right[j]&&x-r1>left[j]))

{

if(num[i][j]==0)

{ continue;}

setcolor(10);

rectangle(left[j],top[i],right[j],bottom[i]);

setfillstyle(SOLID_FILL,10);

floodfill(left[j]+1,top[i]+1,10);

dx=-dx;

num[i][j]=0;

score=score+10;

printf("%d\b\b\b",score);

}

}

}

if(x+r1>639) /控制小球的d射范围/

{dx=-dx;x=638-r1;}

if(x<=r1)

{dx=-dx;x=r1+1;}

if(y+r1>=479)

{off=0;quitwindow();break;}

if(y<=r1)

{dy=-dy;y=r1+1;}

if(score==560)

{off=0;quitwindow();break;}

setcolor(6);

circle(x,y,r1);

setfillstyle(SOLID_FILL,14);

floodfill(x,y,6);

delay(1000);

setcolor(10);

circle(x,y,r1);

setfillstyle(SOLID_FILL,10);

floodfill(x,y,10);

}

a=getch();

setcolor(10);

rectangle(l,t,r,b);

setfillstyle(SOLID_FILL,10);

floodfill(l+2,t+2,10);

if(a==77&&l<=565) /键盘控制设定/

{dl=20;l=l+dl;}

if(a==75&&l>=15)

{dl=-20;l=l+dl;}

if(a=='y'&&on==1)

break;

if(a=='n'&&on==1)

break;

if(a==27)

{quitwindow();off=0;}

r=l+60;

setcolor(4);

rectangle(l,t,r,b);

setfillstyle(SOLID_FILL,1);

floodfill(l+5,t+5,4);

delay(100);

}

if(a=='y'&&on==1) /是否退出游戏/

{break;}

if(a=='n'&&on==1)

{ continue;}

}

closegraph();

}

你不是要求在TC里运行么

C++和C不同的

如果要在C++里

你前面要写函数的声明的

C里就不用

修改过了,试一试吧。

我这里可以

一闪而过那个是图形界面的问题

驱动没安装好

# include "Typerh"

# include <stdioh>

# include <stdlibh>

# include <graphicsh>

//download by >

以下是贪吃蛇源代码:

#include<iostreamh>

#include<windowsh>

#include<timeh>

#include<stdlibh>

#include<conioh>

#define N 21

void gotoxy(int x,int y)//位置函数

{

COORD pos;

posX=2x;

posY=y;

SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);

}

void color(int a)//颜色函数

{

SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),a);

}

void init(int apple[2])//初始化函数(初始化围墙、显示信息、苹果)

{

int i,j;//初始化围墙

int wall[N+2][N+2]={{0}};

for(i=1;i<=N;i++)

{

for(j=1;j<=N;j++)

wall[i][j]=1;

}

color(11);

for(i=0;i<N+2;i++)

{

for(j=0;j<N+2;j++)

{

if(wall[i][j])

cout<<"■";

else cout<<"□" ;

}

cout<<endl;

}

gotoxy(N+3,1);//显示信息

color(20);

cout<<"按 W S A D 移动方向"<<endl;

gotoxy(N+3,2);

color(20);

cout<<"按任意键暂停"<<endl;

gotoxy(N+3,3);

color(20);

cout<<"得分:"<<endl;

apple[0]=rand()%N+1;//苹果

apple[1]=rand()%N+1;

gotoxy(apple[0],apple[1]);

color(12);

cout<<"●"<<endl;

}

int main()

{

int i,j;

int snake=NULL;

int apple[2];

int score=0;

int tail[2];

int len=3;

char ch='p';

srand((unsigned)time(NULL));

init(apple);

snake=(int)realloc(snake,sizeof(int)len);

for(i=0;i<len;i++)

snake[i]=(int)malloc(sizeof(int)2);

for(i=0;i<len;i++)

{

snake[i][0]=N/2;

snake[i][1]=N/2+i;

gotoxy(snake[i][0],snake[i][1]);

color(14);

cout<<"★"<<endl;

}

while(1)//进入消息循环

{

tail[0]=snake[len-1][0];

tail[1]=snake[len-1][1];

gotoxy(tail[0],tail[1]);

color(11);

cout<<"■"<<endl;

for(i=len-1;i>0;i--)

{

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

snake[i][1]=snake[i-1][1];

gotoxy(snake[i][0],snake[i][1]);

color(14);

cout<<"★"<<endl;

}

if(kbhit())

{

gotoxy(0,N+2);

ch=getche();

}

switch(ch)

{

case 'w':snake[0][1]--;break;

case 's':snake[0][1]++;break;

case 'a':snake[0][0]--;break;

case 'd':snake[0][0]++;break;

default: break;

}

gotoxy(snake[0][0],snake[0][1]);

color(14);

cout<<"★"<<endl;

Sleep(abs(200-05score));

if(snake[0][0]==apple[0]&&snake[0][1]==apple[1])//吃掉苹果后蛇分数加1,蛇长加1

{

score++;

len++;

snake=(int)realloc(snake,sizeof(int)len);

snake[len-1]=(int)malloc(sizeof(int)2);

apple[0]=rand()%N+1;

apple[1]=rand()%N+1;

gotoxy(apple[0],apple[1]);

color(12);

cout<<"●"<<endl;

gotoxy(N+5,3);

color(20);

cout<<score<<endl;

}

if(snake[0][1]==0||snake[0][1]==N||snake[0][0]==0||snake[0][0]==N)//撞到围墙后失败

{

gotoxy(N/2,N/2);

color(30);

cout<<"失败!!!"<<endl;

for(i=0;i<len;i++)

free(snake[i]);

Sleep(INFINITE);

exit(0);

}

}

return 0;

}

在这里先纠正你一个很多人都会犯的错误:VC60就是VC++60,大家习惯把VC++60叫VC60或VC,因为省略了两个"+"号,读起来很方便

你如果要用VC编译C源代码的话,先新建一个文本文件,把你的C源代码粘贴进去,保存为一个扩展名为C的文件(比如testc),然后运行VC++60打开这个文件,按下键盘上的F5进行编译运行这个时候它会d出一个对话框意思是说这个工程还没有一个工程文件是否要保存,点"是"进行确认后,如果你的源代码没有问题的话就可以运行程序了;

新建工程,在VC++60刚刚开启(待命状态下),点文件->新建(或CTRL+N)选择新建工程,在d出的对话框中你可以看到需要选择工程的类型

1ATL 一般是为编写 COM组件 或服务程序提供向导

2资源文件 一般为DLL文件

3自定义向导

4数据工程 (数据库相关)

大多数初学者只需用到MFC AppWizard(DLL\EXE)就是MFC动态链接库或MFC应用程序,然后输入一个工程名字点"确定进入下一步",然后逐步选择你要创建的程序的一写基本功能或风格,在完成最后一步的时候VC++已经根据你的要求生成了一个具有基本功能的程序框架,这时你可以按键盘上的F5键运行该程序,当然了,这个框架程序不能满足我们的需求,你还需要手工添加代码以达到你的需要,能帮的到的就这些了,自己多琢磨琢磨也就懂了!

#include <graphicsh>

#include <conioh>

#include <timeh>

/////////////////////////////////////////////

// 定义常量、枚举量、结构体、全局变量

/////////////////////////////////////////////

#define WIDTH 10 // 游戏区宽度

#define HEIGHT 22 // 游戏区高度

#define SIZE 20 // 每个游戏区单位的实际像素

// 定义 *** 作类型

enum CMD

{

CMD_ROTATE, // 方块旋转

CMD_LEFT, CMD_RIGHT, CMD_DOWN, // 方块左、右、下移动

CMD_SINK, // 方块沉底

CMD_QUIT // 退出游戏

};

// 定义绘制方块的方法

enum DRAW

{

SHOW, // 显示方块

HIDE, // 隐藏方块

FIX // 固定方块

};

// 定义七种俄罗斯方块

struct BLOCK

{

WORD dir[4]; // 方块的四个旋转状态

COLORREF color; // 方块的颜色

} g_Blocks[7] = { {0x0F00, 0x4444, 0x0F00, 0x4444, RED}, // I

{0x0660, 0x0660, 0x0660, 0x0660, BLUE}, // 口

{0x4460, 0x02E0, 0x0622, 0x0740, MAGENTA}, // L

{0x2260, 0x0E20, 0x0644, 0x0470, YELLOW}, // 反L

{0x0C60, 0x2640, 0x0C60, 0x2640, CYAN}, // Z

{0x0360, 0x4620, 0x0360, 0x4620, GREEN}, // 反Z

{0x4E00, 0x4C40, 0x0E40, 0x4640, BROWN}}; // T

// 定义当前方块、下一个方块的信息

struct BLOCKINFO

{

byte id; // 方块 ID

char x, y; // 方块在游戏区中的坐标

byte dir:2; // 方向

} g_CurBlock, g_NextBlock;

// 定义游戏区

BYTE g_World[WIDTH][HEIGHT] = {0};

/////////////////////////////////////////////

// 函数声明

/////////////////////////////////////////////

void Init(); // 初始化游戏

void Quit(); // 退出游戏

void NewGame(); // 开始新游戏

void GameOver(); // 结束游戏

CMD GetCmd(); // 获取控制命令

void DispatchCmd(CMD _cmd); // 分发控制命令

void NewBlock(); // 生成新的方块

bool CheckBlock(BLOCKINFO _block); // 检测指定方块是否可以放下

void DrawBlock(BLOCKINFO _block, DRAW _draw = SHOW); // 画方块

void OnRotate(); // 旋转方块

void OnLeft(); // 左移方块

void OnRight(); // 右移方块

void OnDown(); // 下移方块

void OnSink(); // 沉底方块

/////////////////////////////////////////////

// 函数定义

/////////////////////////////////////////////

// 主函数

void main()

{

Init();

CMD c;

while(true)

{

c = GetCmd();

DispatchCmd(c);

// 按退出时,显示对话框咨询用户是否退出

if (c == CMD_QUIT)

{

HWND wnd = GetHWnd();

if (MessageBox(wnd, _T("您要退出游戏吗?"), _T("提醒"), MB_OKCANCEL | MB_ICONQUESTION) == IDOK)

Quit();

}

}

}

// 初始化游戏

void Init()

{

initgraph(640, 480);

srand((unsigned)time(NULL));

// 显示 *** 作说明

setfont(14, 0, _T("宋体"));

outtextxy(20, 330, _T(" *** 作说明"));

outtextxy(20, 350, _T("上:旋转"));

outtextxy(20, 370, _T("左:左移"));

outtextxy(20, 390, _T("右:右移"));

outtextxy(20, 410, _T("下:下移"));

outtextxy(20, 430, _T("空格:沉底"));

outtextxy(20, 450, _T("ESC:退出"));

// 设置坐标原点

setorigin(220, 20);

// 绘制游戏区边界

rectangle(-1, -1, WIDTH SIZE, HEIGHT SIZE);

rectangle((WIDTH + 1) SIZE - 1, -1, (WIDTH + 5) SIZE, 4 SIZE);

// 开始新游戏

NewGame();

}

// 退出游戏

void Quit()

{

closegraph();

exit(0);

}

// 开始新游戏

void NewGame()

{

// 清空游戏区

setfillstyle(BLACK);

bar(0, 0, WIDTH SIZE - 1, HEIGHT SIZE - 1);

ZeroMemory(g_World, WIDTH HEIGHT);

// 生成下一个方块

g_NextBlockid = rand() % 7;

g_NextBlockdir = rand() % 4;

g_NextBlockx = WIDTH + 1;

g_NextBlocky = HEIGHT - 1;

// 获取新方块

NewBlock();

}

// 结束游戏

void GameOver()

{

HWND wnd = GetHWnd();

if (MessageBox(wnd, _T("游戏结束。\n您想重新来一局吗?"), _T("游戏结束"), MB_YESNO | MB_ICONQUESTION) == IDYES)

NewGame();

else

Quit();

}

// 获取控制命令

DWORD m_oldtime;

CMD GetCmd()

{

// 获取控制值

while(true)

{

// 如果超时,自动下落一格

DWORD newtime = GetTickCount();

if (newtime - m_oldtime >= 500)

{

m_oldtime = newtime;

return CMD_DOWN;

}

// 如果有按键,返回按键对应的功能

if (kbhit())

{

switch(getch())

{

case 'w':

case 'W': return CMD_ROTATE;

case 'a':

case 'A': return CMD_LEFT;

case 'd':

case 'D': return CMD_RIGHT;

case 's':

case 'S': return CMD_DOWN;

case 27: return CMD_QUIT;

case ' ': return CMD_SINK;

case 0:

case 0xE0:

switch(getch())

{

case 72: return CMD_ROTATE;

case 75: return CMD_LEFT;

case 77: return CMD_RIGHT;

case 80: return CMD_DOWN;

}

}

}

// 延时 (降低 CPU 占用率)

Sleep(20);

}

}

// 分发控制命令

void DispatchCmd(CMD _cmd)

{

switch(_cmd)

{

case CMD_ROTATE: OnRotate(); break;

case CMD_LEFT: OnLeft(); break;

case CMD_RIGHT: OnRight(); break;

case CMD_DOWN: OnDown(); break;

case CMD_SINK: OnSink(); break;

case CMD_QUIT: break;

}

}

// 生成新的方块

void NewBlock()

{

g_CurBlockid = g_NextBlockid, g_NextBlockid = rand() % 7;

g_CurBlockdir = g_NextBlockdir, g_NextBlockdir = rand() % 4;

g_CurBlockx = (WIDTH - 4) / 2;

g_CurBlocky = HEIGHT + 2;

// 下移新方块直到有局部显示

WORD c = g_Blocks[g_CurBlockid]dir[g_CurBlockdir];

while((c & 0xF) == 0)

{

g_CurBlocky--;

c >>= 4;

}

// 绘制新方块

DrawBlock(g_CurBlock);

// 绘制下一个方块

setfillstyle(BLACK);

bar((WIDTH + 1) SIZE, 0, (WIDTH + 5) SIZE - 1, 4 SIZE - 1);

DrawBlock(g_NextBlock);

// 设置计时器,用于判断自动下落

m_oldtime = GetTickCount();

}

// 画方块

void DrawBlock(BLOCKINFO _block, DRAW _draw)

{

WORD b = g_Blocks[_blockid]dir[_blockdir];

int x, y;

int color = BLACK;

switch(_draw)

{

case SHOW: color = g_Blocks[_blockid]color; break;

case HIDE: color = BLACK; break;

case FIX: color = g_Blocks[_blockid]color / 3; break;

}

setfillstyle(color);

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

{

if (b & 0x8000)

{

x = _blockx + i % 4;

y = _blocky - i / 4;

if (y < HEIGHT)

{

if (_draw != HIDE)

bar3d(x SIZE + 2, (HEIGHT - y - 1) SIZE + 2, (x + 1) SIZE - 4, (HEIGHT - y) SIZE - 4, 3, true);

else

bar(x SIZE, (HEIGHT - y - 1) SIZE, (x + 1) SIZE - 1, (HEIGHT - y) SIZE - 1);

}

}

b <<= 1;

}

}

// 检测指定方块是否可以放下

bool CheckBlock(BLOCKINFO _block)

{

WORD b = g_Blocks[_blockid]dir[_blockdir];

int x, y;

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

{

if (b & 0x8000)

{

x = _blockx + i % 4;

y = _blocky - i / 4;

if ((x < 0) || (x >= WIDTH) || (y < 0))

return false;

if ((y < HEIGHT) && (g_World[x][y]))

return false;

}

b <<= 1;

}

return true;

}

// 旋转方块

void OnRotate()

{

// 获取可以旋转的 x 偏移量

int dx;

BLOCKINFO tmp = g_CurBlock;

tmpdir++; if (CheckBlock(tmp)) { dx = 0; goto rotate; }

tmpx = g_CurBlockx - 1; if (CheckBlock(tmp)) { dx = -1; goto rotate; }

tmpx = g_CurBlockx + 1; if (CheckBlock(tmp)) { dx = 1; goto rotate; }

tmpx = g_CurBlockx - 2; if (CheckBlock(tmp)) { dx = -2; goto rotate; }

tmpx = g_CurBlockx + 2; if (CheckBlock(tmp)) { dx = 2; goto rotate; }

return;

rotate:

// 旋转

DrawBlock(g_CurBlock, HIDE);

g_CurBlockdir++;

g_CurBlockx += dx;

DrawBlock(g_CurBlock);

}

// 左移方块

void OnLeft()

{

BLOCKINFO tmp = g_CurBlock;

tmpx--;

if (CheckBlock(tmp))

{

DrawBlock(g_CurBlock, HIDE);

g_CurBlockx--;

DrawBlock(g_CurBlock);

}

}

// 右移方块

void OnRight()

{

BLOCKINFO tmp = g_CurBlock;

tmpx++;

if (CheckBlock(tmp))

{

DrawBlock(g_CurBlock, HIDE);

g_CurBlockx++;

DrawBlock(g_CurBlock);

}

}

// 下移方块

void OnDown()

{

BLOCKINFO tmp = g_CurBlock;

tmpy--;

if (CheckBlock(tmp))

{

DrawBlock(g_CurBlock, HIDE);

g_CurBlocky--;

DrawBlock(g_CurBlock);

}

else

OnSink(); // 不可下移时,执行“沉底方块” *** 作

}

// 沉底方块

void OnSink()

{

int i, x, y;

// 连续下移方块

DrawBlock(g_CurBlock, HIDE);

BLOCKINFO tmp = g_CurBlock;

tmpy--;

while (CheckBlock(tmp))

{

g_CurBlocky--;

tmpy--;

}

DrawBlock(g_CurBlock, FIX);

// 固定方块在游戏区

WORD b = g_Blocks[g_CurBlockid]dir[g_CurBlockdir];

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

{

if (b & 0x8000)

{

if (g_CurBlocky - i / 4 >= HEIGHT)

{ // 如果方块的固定位置超出高度,结束游戏

GameOver();

return;

}

else

g_World[g_CurBlockx + i % 4][g_CurBlocky - i / 4] = 1;

}

b <<= 1;

}

// 检查是否需要消掉行,并标记

int row[4] = {0};

bool bRow = false;

for(y = g_CurBlocky; y >= max(g_CurBlocky - 3, 0); y--)

{

i = 0;

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

if (g_World[x][y] == 1)

i++;

if (i == WIDTH)

{

bRow = true;

row[g_CurBlocky - y] = 1;

setfillstyle(WHITE, DIAGCROSS2_FILL);

bar(0, (HEIGHT - y - 1) SIZE + SIZE / 2 - 2, WIDTH SIZE - 1, (HEIGHT - y - 1) SIZE + SIZE / 2 + 2);

}

}

if (bRow)

{

// 延时 200 毫秒

Sleep(200);

// 擦掉刚才标记的行

IMAGE img;

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

{

if (row[i])

{

for(y = g_CurBlocky - i + 1; y < HEIGHT; y++)

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

{

g_World[x][y - 1] = g_World[x][y];

g_World[x][y] = 0;

}

getimage(&img, 0, 0, WIDTH SIZE, (HEIGHT - (g_CurBlocky - i + 1)) SIZE);

putimage(0, SIZE, &img);

}

}

}

// 产生新方块

NewBlock();

}

数字版“拼图”游戏C源代码:

#include<timeh>

#include<stdioh>

#include<stdlibh>

#include<conioh>

#include<windowsh>

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("\n\n\t\t   数字拼图");

printf("\n\t┌──────┬──────┬──────┬──────┐");

printf("\n\t│      │      │      │      │");

printf("\n\t├──────┼──────┼──────┼──────┤");

printf("\n\t│      │      │      │      │");

printf("\n\t├──────┼──────┼──────┼──────┤");

printf("\n\t│      │      │      │      │");

printf("\n\t├──────┼──────┼──────┼──────┤");

printf("\n\t│      │      │      │      │");

printf("\n\t└──────┴──────┴──────┴──────┘");

show( );

}

void show(void)

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

for(j=0;j<4;j++)  //gtxy(7j+9, 2i+4)是光标到指定位置输出数字

{gtxy(7j+9,2i+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;

coordX = x;

coordY = y;

SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);

}

以上就是关于求C语言编写的壁球小游戏的源代码,谢谢。全部的内容,包括:求C语言编写的壁球小游戏的源代码,谢谢。、求纯C语言打字游戏源代码及解析、求C++小游戏源代码啊~等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10140365.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存