你好,我写了一个C++的,在VS上完美运行,希望能够帮到你。
#include<stdio.h>#include<stdlib.h>
#include<悔辩conio.h>
#include<time.h>
/*定义全局变量*/
int puzz[9] // 九格游戏数组
int i=0,j,k // i 初始化界面的提示语,j 获取空格位置,k 移动次数
int space // 空缺位铅宏置
/*自定义函数原型*/
void interface() // 界面,包括打印充填矩形和数字
void change(int a,int b) // 交换
void press() // 按键
void start() // 初始化和判断是否胜利
void start() // 初始化和判断是否碧激缺胜利
{
int a,b,c
int star[22]={300,120,320,160,360,160,320,200,340,240,300,200,260,240,280,200,240,160,280,160,300,120}
k=0
for(a=0a<8a++)
puzz[a]=a+1
puzz[8]=0
interface()
for(c=0c<100c++) // 随机打乱顺序
{
a=rand()%9
b=(a+2)%8 // 关于有无解问题,搞不清楚,引用的
change(a,b)
}
while(1)
{
interface()
for(a=0a<8a++)
if(puzz[a]!=a+1)
break
if(a==8)
{
drawpoly(11,star) // 五角星
setcolor(1) // 文本“SUCCESSFUL”颜色
setfillstyle(1,4) // 五角星填充色
floodfill(300,150,15) // 五角星内一点
outtextxy(260,180,"SUCCESSFUL!!")
getch()
start()
}
for(j=0j<=8j++)
if (puzz[j]==0)
break
space=j
press()
}
}
void interface() // 界面,包括打印充填矩形和数字
{
clearviewport() // 清楚屏幕图形
setbkcolor(6) // 设置背景色
setfillstyle(2,2) // 矩形块颜色
if(puzz[0]!=0)
bar(160,60,240,140)
if(puzz[1]!=0)
bar(260,60,340,140)
if(puzz[2]!=0)
bar(360,60,440,140)
if(puzz[3]!=0)
bar(160,160,240,240)
if(puzz[4]!=0)
bar(260,160,340,240)
if(puzz[5]!=0)
bar(360,160,440,240)
if(puzz[6]!=0)
bar(160,260,240,340)
if(puzz[7]!=0)
bar(260,260,340,340)
if(puzz[8]!=0)
bar(360,260,440,340)
gotoxy(25,7)
if(puzz[0]!=0)
printf("%d",puzz[0])
gotoxy(38,7)
if(puzz[1]!=0)
printf("%d",puzz[1])
gotoxy(50,7)
if(puzz[2]!=0)
printf("%d",puzz[2])
gotoxy(25,13)
if(puzz[3]!=0)
printf("%d",puzz[3])
gotoxy(38,13)
if(puzz[4]!=0)
printf("%d",puzz[4])
gotoxy(50,13)
if(puzz[5]!=0)
printf("%d",puzz[5])
gotoxy(25,19)
if(puzz[6]!=0)
printf("%d",puzz[6])
gotoxy(38,19)
if(puzz[7]!=0)
printf("%d",puzz[7])
gotoxy(50,19)
if(puzz[8]!=0)
printf("%d",puzz[8])
if(i==0)
{
printf("\n\n\n\n\n\t\tPress any key to dare ")
getch()
}
gotoxy(60,4) // 打印移动次数
printf("%d th",k)
i+=1
return
}
int main()
{
int gdriver=VGA,gmode=VGAHI
initgraph(&gdriver,&gmode,"c:\\tc30\\BGI")
srand((unsigned)time(NULL)) // 播种子
clearviewport() // 清屏
printf("\n\n\t\t\t/////////////////////////////\n")
printf("\n")
printf("\t\t\t\tPUZZLE GAME\n")
printf("\n")
printf("\t\t\t/////////////////////////////\n")
printf("\n\n\n\n\n\n\tPress any key to start game")
printf("\n\n\tPress Esc to exit\n\n\t")
if(getch()==27)
{
clrscr()
clearviewport()
printf("\n\n\n\t\t\t//////////////////////////////////\n")
printf("\n\t\t\t\tSee you next time\n")
printf("\n\t\t\t//////////////////////////////////\n")
printf("\n\n\n\n\n\t\t\tPress any key to exit ")
getch()
closegraph()
return 0
}
start()
return 0
}
数字版“拼图”游戏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=0i<4i++) //给数组a依序赋值
for(j=0j<4j++)
{ 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=1n=1
srand((unsigned)time(0)) //初始化随机数发生器
for(r=0r<500r++) //将数组各值打乱
{ 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=0i<4i++)
for(j=0j<4j++) //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=0i<4i++)
for(j=0j<4j++)
{ 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)
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)