用c语言拼图编程程序,或者算法

用c语言拼图编程程序,或者算法,第1张

你好,我写了一个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)

}


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

原文地址: http://outofmemory.cn/yw/12338608.html

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

发表评论

登录后才能评论

评论列表(0条)

保存