学习“推箱子”C语言编码:
#include <stdio.h>
#include <conio.h>
#include<stdlib.h>
#include<windows.h>
int m =0 //m代表第几关
struct maps{short a[9][11]}
struct maps map[5]={ 0,0,0,0,0,0,0,0,0,0,0, //共5关,每关9行
0,1,1,1,1,1,1,1,0,0,0,
0,1,0,0,0,0,0,1,1,1,0,
衡蚂巧 1,1,4,1,1,1,0,0,0,1,0, //0空地,1墙
1,5,0,0,4,0,0,4,0,1,0, //4是箱子,5是人
1,0,3,3,1,0,4,0,1,1,0, //3是目的地
1,1,3,3,1,0,0,0,1,0,0, //7是箱子在目的地(4+3)
0,1,1,1,1,1,1,1,1,0,0, //8是人在目的地(5+3)
0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,
0,0,1,1,1,1,0,0,0,0,0,
0,0,1,5,0,1,1,1,0,0,0,
0,0,1,0,4,0,0,1,0,0,0,
0,1,1,1,0,1,0,1,1,0,0,
0,1,3,1,0,1,0,0,1,0,0,
0,1,3,4,0,0,1,0,1,0,0,
0,1,3,0,0,0,4,0,1,0,0,
0,1,1,1,1,1,1,1,1,0,0,
0,0,0,0,0,0,0,0,0,0,0,
0,0,0,1,1,1,1,1,1,1,0,
0,0,1,1,0,0,1,0,5,1,0,
0,0,1,0,0,0,1,0,0,1,0,
0,0,1,4,0,4,0,4,0,1,0,
0,0,1,0,4,1,1,0,0,1,0,
物野 1,1,1,0,4,0,1,0,1,1,0,
1,3,3,3,3,3,0,0,1,0,0,
1,1,1,1,1,1,1,1,1,0,0,
0,1,1,1,1,1,1,1,1,1,0,
0,1,0,0,1,1,0,0,0,1,0,
0,1,0,0,0,4,0,0,0,1,0,
0,1,4,0,1,1,1,0,4,1,0,
0,1,0,1,3,3,3,1,0,1,0,
1,1,0,1,3,3,3,1,0,1,1,
1,0,4,0,0,4,0,0,4,0,1,
1,0,0,0,0,0,1,0,5,0,1,
1,1,1,1,1,1,1,1,1,1,1,
0,0,0,0,0,0,0,0,0,0,0,
0,0,0,1,1,1,1,1,1,0,0,
0,1,1,1,0,0,0,0,1,0,0,
咐键 1,1,3,0,4,1,1,0,1,1,0,
1,3,3,4,0,4,0,0,5,1,0,
1,3,3,0,4,0,4,0,1,1,0,
1,1,1,1,1,1,0,0,1,0,0,
0,0,0,0,0,1,1,1,1,0,0,
0,0,0,0,0,0,0,0,0,0,0 }
void DrMap( ) //绘制地图
{ CONSOLE_CURSOR_INFO cursor_info={1,0} //隐藏光标的设置
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info)
printf("\n\n \t\t\b推箱子")
printf("\n \t")
for (int i = 0i <9i++)
{for (int j = 0j <11j++)
{switch (map[m].a[i][j])
{case 0: printf(" ")break
case 1: printf("■")break
case 3: printf("◎")break
case 4: printf("□")break
case 5: printf("♀")break //5是人
case 7: printf("□")break //4 + 3箱子在目的地中
case 8: printf("♀")break // 5 + 3人在目的地中
}
}
printf("\n\t")
}
}
void gtxy(int x, int y) //控制光标位置的函数
{ COORD coord
coord.X = x
coord.Y = y
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord)
}
void start( ) //开始游戏
{ int r, c //r,c用于记录人的下标
for (int i = 0i <9i++)
{ for (int j = 0j <11j++)
{if (map[m].a[i][j] == 5||map[m].a[i][j]==8) { r = i c = j} } //i j 人的下标
}
char key
key = getch( )
switch (key)
{case 'W':
case 'w':
case 72:
if (map[m]. a[r - 1][c] == 0|| map[m]. a [r - 1][c] == 3)
{ gtxy(2*c+8,r-1+3)printf("♀") // gtxy(2*c+8,r-1+3)是到指定位置输出字符
if(map[m]. a[r ][c] == 5){gtxy(2*c+8,r+3)printf(" ")}
if(map[m]. a[r ][c] == 8){gtxy(2*c+8,r+3)printf("◎")}
map[m]. a [r - 1][c] += 5 map[m]. a [r][c] -= 5}
else if (map[m]. a [r - 1][c] == 4 || map[m]. a [r - 1][c] == 7)
{ if (map[m]. a [r - 2][c] == 0 || map[m]. a [r - 2][c] == 3)
{ gtxy(2*c+8,r-2+3)printf("□")gtxy(2*c+8,r-1+3)printf("♀")
if(map[m]. a[r ][c] == 5){gtxy(2*c+8,r+3)printf(" ")}
if(map[m]. a[r ][c] == 8){gtxy(2*c+8,r+3)printf("◎")}
map[m]. a [r - 2][c] += 4 map[m]. a [r - 1][c] += 1
map[m]. a [r][c] -= 5}
} break
case 'S':
case 's':
case 80:
if (map[m]. a [r + 1][c] == 0 || map[m]. a [r + 1][c] == 3)
{ gtxy(2*c+8,r+1+3)printf("♀")
if(map[m]. a[r ][c] == 5){gtxy(2*c+8,r+3)printf(" ")}
if(map[m]. a[r ][c] == 8){gtxy(2*c+8,r+3)printf("◎")}
map[m]. a [r + 1][c] += 5 map[m]. a [r][c] -= 5}
else if (map[m]. a [r + 1][c] == 4 || map[m]. a [r+ 1][c] == 7)
{ if (map[m]. a [r + 2][c] == 0 || map[m]. a [r + 2][c] == 3)
{ gtxy(2*c+8,r+2+3)printf("□")gtxy(2*c+8,r+1+3)printf("♀")
if(map[m]. a[r ][c] == 5){gtxy(2*c+8,r+3)printf(" ")}
if(map[m]. a[r ][c] == 8){gtxy(2*c+8,r+3)printf("◎")}
map[m]. a [r + 2][c] += 4map[m]. a [r + 1][c] += 1
map[m]. a [r][c] -= 5}
}break
case 'A':
case 'a':
case 75:
if (map[m]. a [r ][c - 1] == 0 || map[m]. a [r ][c - 1] == 3)
{ gtxy(2*(c-1)+8,r+3)printf("♀")
if(map[m]. a[r ][c] == 5){gtxy(2*c+8,r+3)printf(" ")}
if(map[m]. a[r ][c] == 8){gtxy(2*c+8,r+3)printf("◎")}
map[m]. a [r ][c - 1] += 5map[m]. a [r][c] -= 5}
else if (map[m]. a [r][c - 1] == 4 || map[m]. a [r][c - 1] == 7)
{if (map[m]. a [r ][c - 2] == 0 || map[m]. a [r ][c - 2] == 3)
{ gtxy(2*(c-2)+8,r+3)printf("□")gtxy(2*(c-1)+8,r+3)printf("♀")
if(map[m]. a[r ][c] == 5){gtxy(2*c+8,r+3)printf(" ")}
if(map[m]. a[r ][c] == 8){gtxy(2*c+8,r+3)printf("◎")}
map[m]. a [r ][c - 2] += 4map[m]. a [r ][c - 1] += 1
map[m]. a [r][c] -= 5}
}break
case 'D':
case 'd':
case 77:
if (map[m]. a [r][c + 1] == 0 || map[m]. a [r][c + 1] == 3)
{ gtxy(2*(c+1)+8,r+3)printf("♀")
if(map[m]. a[r ][c] == 5){gtxy(2*c+8,r+3)printf(" ")}
if(map[m]. a[r ][c] == 8) {gtxy(2*c+8,r+3)printf("◎")}
map[m]. a [r][c + 1] += 5 map[m]. a [r][c] -= 5}
else if (map[m]. a [r][c + 1] == 4 || map[m]. a [r][c + 1] == 7)
{ if (map[m]. a [r][c + 2] == 0 || map[m]. a [r][c + 2] == 3)
{ gtxy(2*(c+2)+8,r+3)printf("□")gtxy(2*(c+1)+8,r+3)printf("♀")
if(map[m]. a[r ][c] == 5){gtxy(2*c+8,r+3)printf(" ")}
if(map[m]. a[r ][c] == 8){gtxy(2*c+8,r+3)printf("◎")}
map[m]. a [r][c + 2] += 4map[m]. a [r][c + 1] += 1
map[m]. a [r][c] -= 5}
}break
}
}
int ifwan( ) //是否完成(1是0否)
{ if(m==0){if(map[m].a[5][2]==7&&map[m].a[5][3]==7&&
map[m].a[6][2]==7&&map[m].a[6][3]==7) return 1}
if(m==1){if(map[m].a[5][2]==7&&map[m].a[6][2]==7&&
map[m].a[7][2]==7) return 1}
if(m==2){if(map[m].a[7][1]==7&&map[m].a[7][2]==7&&map[m].a[7][3]==7&&
map[m].a[7][4]==7&&map[m].a[7][5]==7) return 1}
if(m==3){if(map[m].a[4][4]==7&&map[m].a[4][5]==7&&map[m].a[4][6]==7&&
map[m].a[5][4]==7&&map[m].a[5][5]==7&&map[m].a[5][6]==7) return 1}
if(m==4){if(map[m].a[3][2]==7&&map[m].a[4][1]==7&&map[m].a[4][2]==7&&
map[m].a[5][1]==7&&map[m].a[5][2]==7) return 1}
return 0
}
int main( ) //主函数
{ while (1)
{ system("cls")
DrMap( )
while (1)
{ start( )
if(ifwan()){printf(" }7")break} //完成后响铃
m+=1
}
return 0
}
获取源码方式:点赞+转发+关注+私信【进销存ERP】
开发环境为Visual Studio 2012,数据库为SQL SERVER2012R2,使用.net 4.5开发。
一、源码介绍
所有行业的ERP系统/进销存/仓库系统,该系统为vs2012 .net+MsSQL版,目前标准版功能简单、明了、满足公司正常谨携使用,已有多家企业正常使用,成熟稳定,有需要的可以下载看看。
二、主要功能
1、电商管理(可以和公众号、小程序对接) 微信订单、小程序订单、公众号订单
参数设置:轮播图片设置、分类导航设置、小程序参数设置、公众号参数设置
2、销售管理:销售订单、销售出库
3、采购管理:采购订单、采购入库
4、生产管理:BOM分组、BOM清单、生产计划、生产领料、生产入库
5、仓库管理:其他入库、其他出库、商品组装、商品拆卸、库存盘点、库存调拨
6、财务管理:销售收款、其他收款、采购付款、其他付款、收款核销、付款核销
7、采购报表
采购订单跟踪表 采购明细表 采购汇总表(按商品) 采购汇总表(按供应商)
8、销售报表
销售订单跟踪表 销售明细表凳宽 销售汇总表(按商品) 销售汇总表(按客户)
9、生产报表
生产计划跟踪表 生产领料明细表 生产领料汇总表 生产入库明细表 生产入库汇总表
10、仓存报表
商品库存余额表 商品收发明细表 商品收发汇总表
11、资金报表
现金银行报表 应付账款明细表 应收账款明细表
客户对账单 供应商对账单 其他收支明细
12、基础资料
供应商管理 商品管理 仓库管祥粗伏理 账户管理 员工管理 企业号通讯录
工序管理 辅助资料 客户类别 供应商类别 商品类别 商品品牌
收支类别 计量单位 结算方式 工序类别 高级设置 *** 作日志
参数设置 打印设置 Logo印章
3、默认数据库连接字符串在web.config配置文件中修改
欢迎点赞+转发+关注!大家的支持是我分享最大的动力!!!
******************************************************************************
******************************************************************************
黑白棋游戏#include "graphics.h" /*图形系统头文件*/
#define LEFT 0x4b00 /*光标左键值*/
#define RIGHT 0x4d00 /*光标右键值*/
#define DOWN 0x5000 /*光标下键值*/
#define UP 0x4800 /*光标上键值*/
#define ESC 0x011b /* ESC键值*/
#define ENTER 0x1c0d /* 回车键值*/
int a[8][8]={0},key,score1,score2/*具体分数以及按键与存放棋子的变量*/
char playone[3],playtwo[3]/*两个人的得分转换成字符串输出*/
void playtoplay(void)/*人人对战函数*/
void DrawQp(void)/*画棋盘函数*/
void SetPlayColor(int x)/*设置棋子第一次的颜色*/
void MoveColor(int x,int y)/*恢复原来棋盘状态*/
int QpChange(int x,int y,int z)/*判断棋盘的变化*/
void DoScore(void)/*处理分数*/
void PrintScore(int n)/*输出成绩*/
void playWin(void)/*输出胜利者信息*/
/******主函数*********/
void main(void)
{
int gd=DETECT,gr
initgraph(&gd,&gr,"c:\\tc")/*初始化图形系统*/
DrawQp()/*画棋盘*/
playtoplay()/*人人对战*/
getch()
closegraph()/*关闭图形系统*/
}
void DrawQp()/*画棋盘*/
{
int i,j
score1=score2=0/*棋手一开始得分都为0*/
setbkcolor(BLUE)
for(i=100i<=420i+=40)
{
line(100,i,420,i)/*画水平线*/
line(i,100,i,420)/*画垂直线*/
}
setcolor(0)/*取消圆周围的一圈东西*/
setfillstyle(SOLID_FILL,15)/*白色实体填凳颤充模式*/
fillellipse(500,200,15,15)/*在显示得分的位置画棋*/
setfillstyle(SOLID_FILL,8)/*黑色实体填充模式*/
fillellipse(500,300,15,15)
a[3][3]=a[4][4]=1/*初始两个黑棋*/
a[3][4]=a[4][3]=2/*初始两个白棋*/
setfillstyle(SOLID_FILL,WHITE)
fillellipse(120+3*40,120+3*40,15,15)
fillellipse(120+4*40,120+4*40,15,15)
setfillstyle(SOLID_FILL,8)
fillellipse(120+3*40,120+4*40,15,15)
fillellipse(120+4*40,120+3*40,15,15)
score1=score2=2/*有棋后改变分数*/
DoScore()/*输出开始分数*/
}
void playtoplay()/*人人对战*/
{
int x,y,t=1,i,j,cc=0
while(1)/*换棋好悄手走棋*/
{
x=120,y=80/*每次棋子一开始出来的坐标,x为行坐标,y为列坐标*/
while(1) /*具体一个棋手走棋的过程*/
{
PrintScore(1)/*输出棋手1的成绩*/
PrintScore(2)/*输出棋手2的成绩*/
SetPlayColor(t)/*t变量是友粗渣用来判断棋手所执棋子的颜色*/
fillellipse(x,y,15,15)
key=bioskey(0)/*接收按键*/
if(key==ESC)/*跳出游戏*/
break
else
if(key==ENTER)/*如果按键确定就可以跳出循环*/
{
if(y!=80&&a[(x-120)/40][(y-120)/40]!=1
&&a[(x-120)/40][(y-120)/40]!=2)/*如果落子位置没有棋子*/
{
if(t%2==1)/*如果是棋手1移动*/
a[(x-120)/40][(y-120)/40]=1
else/*否则棋手2移动*/
a[(x-120)/40][(y-120)/40]=2
if(!QpChange(x,y,t))/*落子后判断棋盘的变化*/
{
a[(x-120)/40][(y-120)/40]=0/*恢复空格状态*/
cc++/*开始统计尝试次数*/
if(cc>=64-score1-score2) /*如果尝试超过空格数则停步*/
{
MoveColor(x,y)
fillellipse(x,y,15,15)
break
}
else
continue/*如果按键无效*/
}
DoScore()/*分数的改变*/
break/*棋盘变化了,则轮对方走棋*/
}
else/*已经有棋子就继续按键*/
continue
}
else /*四个方向按键的判断*/
if(key==LEFT&&x>120)/*左方向键*/
{
MoveColor(x,y)
fillellipse(x,y,15,15)
SetPlayColor(t)
x-=40
fillellipse(x,y,15,15)
}
else
if(key==RIGHT&&x<400&&y>80)/*右方向键*/
{
MoveColor(x,y)
fillellipse(x,y,15,15)
SetPlayColor(t)
x+=40
fillellipse(x,y,15,15)
}
else
if(key==UP&&y>120)/*上方向键*/
{
MoveColor(x,y)
fillellipse(x,y,15,15)
SetPlayColor(t)
y-=40
fillellipse(x,y,15,15)
}
else
if(key==DOWN&&y<400)/*下方向键*/
{
MoveColor(x,y)
fillellipse(x,y,15,15)
SetPlayColor(t)
y+=40
fillellipse(x,y,15,15)
}
}
if(key==ESC)/*结束游戏*/
break
if((score1+score2)==64||score1==0||score2==0)/*格子已经占满或一方棋子为0判断胜负*/
{
playWin()/*输出最后结果*/
break
}
t=t%2+1/*一方走后,改变棋子颜色即轮对方走*/
cc=0 /*计数值恢复为0*/
} /*endwhile*/
}
void SetPlayColor(int t)/*设置棋子颜色*/
{
if(t%2==1)
setfillstyle(SOLID_FILL,15)/*白色*/
else
setfillstyle(SOLID_FILL,8)/*灰色*/
}
void MoveColor(int x,int y)/*走了一步后恢复原来格子的状态*/
{
if(y<100)/*如果是从起点出发就恢复蓝色*/
setfillstyle(SOLID_FILL,BLUE)
else/*其他情况如果是1就恢复白色棋子,2恢复黑色棋子,或恢复蓝色棋盘*/
switch(a[(x-120)/40][(y-120)/40])
{
case 1:
setfillstyle(SOLID_FILL,15)break/*白色*/
case 2:
setfillstyle(SOLID_FILL,8)break/*黑色*/
default:
setfillstyle(SOLID_FILL,BLUE)/*蓝色*/
}
}
int QpChange(int x,int y,int t)/*判断棋盘的变化*/
{
int i,j,k,kk,ii,jj,yes
yes=0
i=(x-120)/40/*计算数组元素的行下标*/
j=(y-120)/40/*计算数组元素的列下标*/
SetPlayColor(t)/*设置棋子变化的颜色*/
/*开始往8个方向判断变化*/
if(j<6)/*往右边*/
{
for(k=j+1k<8k++)
if(a[i][k]==a[i][j]||a[i][k]==0)/*遇到自己的棋子或空格结束*/
break
if(a[i][k]!=0&&k<8)
{
for(kk=j+1kk<k&&k<8kk++)/*判断右边*/
{
a[i][kk]=a[i][j]/*改变棋子颜色*/
fillellipse(120+i*40,120+kk*40,15,15)
}
if(kk!=j+1) /*条件成立则有棋子改变过颜色*/
yes=1
}
}
if(j>1)/*判断左边*/
{
for(k=j-1k>=0k--)
if(a[i][k]==a[i][j]||!a[i][k])
break
if(a[i][k]!=0&&k>=0)
{
for(kk=j-1kk>k&&k>=0kk--)
{
a[i][kk]=a[i][j]
fillellipse(120+i*40,120+kk*40,15,15)
}
if(kk!=j-1)
yes=1
}
}
if(i<6)/*判断下边*/
{
for(k=i+1k<8k++)
if(a[k][j]==a[i][j]||!a[k][j])
break
if(a[k][j]!=0&&k<8)
{
for(kk=i+1kk<k&&k<8kk++)
{
a[kk][j]=a[i][j]
fillellipse(120+kk*40,120+j*40,15,15)
}
if(kk!=i+1)
yes=1
}
}
if(i>1)/*判断上边*/
{
for(k=i-1k>=0k--)
if(a[k][j]==a[i][j]||!a[k][j])
break
if(a[k][j]!=0&&k>=0)
{
for(kk=i-1kk>k&&k>=0kk--)
{
a[kk][j]=a[i][j]
fillellipse(120+kk*40,120+j*40,15,15)
}
if(kk!=i-1)
yes=1
}
}
if(i>1&&j<6)/*右上*/
{
for(k=i-1,kk=j+1k>=0&&kk<8k--,kk++)
if(a[k][kk]==a[i][j]||!a[k][kk])
break
if(a[k][kk]&&k>=0&&kk<8)
{
for(ii=i-1,jj=j+1ii>k&&k>=0ii--,jj++)
{
a[ii][jj]=a[i][j]
fillellipse(120+ii*40,120+jj*40,15,15)
}
if(ii!=i-1)
yes=1
}
}
if(i<6&&j>1)/*左下*/
{
for(k=i+1,kk=j-1k<8&&kk>=0k++,kk--)
if(a[k][kk]==a[i][j]||!a[k][kk])
break
if(a[k][kk]!=0&&k<8&&kk>=0)
{
for(ii=i+1,jj=j-1ii<k&&k<8ii++,jj--)
{
a[ii][jj]=a[i][j]
fillellipse(120+ii*40,120+jj*40,15,15)
}
if(ii!=i+1)
yes=1
}
}
if(i>1&&j>1)/*左上*/
{
for(k=i-1,kk=j-1k>=0&&kk>=0k--,kk--)
if(a[k][kk]==a[i][j]||!a[k][kk])
break
if(a[k][kk]!=0&&k>=0&&kk>=0)
{
for(ii=i-1,jj=j-1ii>k&&k>=0ii--,jj--)
{
a[ii][jj]=a[i][j]
fillellipse(120+ii*40,120+jj*40,15,15)
}
if(ii!=i-1)
yes=1
}
}
if(i<6&&j<6)/* 右下*/
{
for(k=i+1,kk=j+1kk<8&&kk<8k++,kk++)
if(a[k][kk]==a[i][j]||!a[k][kk])
break
if(a[k][kk]!=0&&kk<8&&k<8)
{
for(ii=i+1,jj=j+1ii<k&&k<8ii++,jj++)
{
a[ii][jj]=a[i][j]
fillellipse(120+ii*40,120+jj*40,15,15)
}
if(ii!=i+1)
yes=1
}
}
return yes/*返回是否改变过棋子颜色的标记*/
}
void DoScore()/*处理分数*/
{
int i,j
score1=score2=0/*重新开始计分数*/
for(i=0i<8i++)
for(j=0j<8j++)
if(a[i][j]==1)/*分别统计两个人的分数*/
score1++
else
if(a[i][j]==2)
score2++
}
void PrintScore(int playnum)/*输出成绩*/
{
if(playnum==1)/*清除以前的成绩*/
{
setfillstyle(SOLID_FILL,BLUE)
bar(550,100,640,400)
}
setcolor(RED)
settextstyle(0,0,4)/*设置文本输出样式*/
if(playnum==1)/*判断输出哪个棋手的分,在不同的位置输出*/
{
sprintf(playone,"%d",score1)
outtextxy(550,200,playone)
}
else
{
sprintf(playtwo,"%d",score2)
outtextxy(550,300,playtwo)
}
setcolor(0)
}
void playWin()/*输出最后的胜利者结果*/
{
settextstyle(0,0,4)
setcolor(12)
if(score2>score1)/*开始判断最后的结果*/
outtextxy(100,50,"black win!")
else
if(score2<score1)
outtextxy(100,50,"white win!")
else
outtextxy(60,50,"you all win!")
}
五子棋游戏
/*五子棋*/
#include<stdio.h>
#include<stdlib.h>
#include<graphics.h>
#include<bios.h>
#include<conio.h>
#define LEFT 0x4b00
#define RIGHT 0x4d00
#define DOWN 0x5000
#define UP 0x4800
#define ESC 0x011b
#define SPACE 0x3920
#define BILI 20
#define JZ 4
#define JS 3
#define N 19
int box[N][N]
int step_x,step_y
int key
int flag=1
void draw_box()
void draw_cicle(int x,int y,int color)
void change()
void judgewho(int x,int y)
void judgekey()
int judgeresult(int x,int y)
void attentoin()
void attention()
{
char ch
window(1,1,80,25)
textbackground(LIGHTBLUE)
textcolor(YELLOW)
clrscr()
gotoxy(15,2)
printf("游戏 *** 作规则:")
gotoxy(15,4)
printf("Play Rules:")
gotoxy(15,6)
printf("1、按左右上下方向键移动棋子")
gotoxy(15,8)
printf("1. Press Left,Right,Up,Down Key to move Piece")
gotoxy(15,10)
printf("2、按空格确定落棋子")
gotoxy(15,12)
printf("2. Press Space to place the Piece")
gotoxy(15,14)
printf("3、禁止在棋盘外按空格")
gotoxy(15,16)
printf("3. DO NOT press Space outside of the chessboard")
gotoxy(15,18)
printf("你是否接受上述的游戏规则(Y/N)")
gotoxy(15,20)
printf("Do you accept the above Playing Rules? [Y/N]:")
while(1)
{
gotoxy(60,20)
ch=getche()
if(ch=='Y'||ch=='y')
break
else if(ch=='N'||ch=='n')
{
window(1,1,80,25)
textbackground(BLACK)
textcolor(LIGHTGRAY)
clrscr()
exit(0)
}
gotoxy(51,12)
printf(" ")
}
}
void draw_box()
{
int x1,x2,y1,y2
setbkcolor(LIGHTBLUE)
setcolor(YELLOW)
gotoxy(7,2)
printf("Left, Right, Up, Down KEY to move, Space to put, ESC-quit.")
for(x1=1,y1=1,y2=18x1<=18x1++)
line((x1+JZ)*BILI,(y1+JS)*BILI,(x1+JZ)*BILI,(y2+JS)*BILI)
for(x1=1,y1=1,x2=18y1<=18y1++)
line((x1+JZ)*BILI,(y1+JS)*BILI,(x2+JZ)*BILI,(y1+JS)*BILI)
for(x1=1x1<=18x1++)
for(y1=1y1<=18y1++)
box[x1][y1]=0
}
void draw_circle(int x,int y,int color)
{
setcolor(color)
setlinestyle(SOLID_LINE,0,1)
x=(x+JZ)*BILI
y=(y+JS)*BILI
circle(x,y,8)
}
void judgekey()
{
int i
int j
switch(key)
{
case LEFT :
if(step_x-1<0)
break
else
{
for(i=step_x-1,j=step_yi>=1i--)
if(box[i][j]==0)
{
draw_circle(step_x,step_y,LIGHTBLUE)
break
}
if(i<1)break
step_x=i
judgewho(step_x,step_y)
break
}
case RIGHT :
if(step_x+1>18)
break
else
{
for(i=step_x+1,j=step_yi<=18i++)
if(box[i][j]==0)
{
draw_circle(step_x,step_y,LIGHTBLUE)
break
}
if(i>18)break
step_x=i
judgewho(step_x,step_y)
break
}
case DOWN :
if((step_y+1)>18)
break
else
{
for(i=step_x,j=step_y+1j<=18j++)
if(box[i][j]==0)
{
draw_circle(step_x,step_y,LIGHTBLUE)
break
}
if(j>18)break
step_y=j
judgewho(step_x,step_y)
break
}
case UP :
if((step_y-1)<0)
break
else
{
for(i=step_x,j=step_y-1j>=1j--)
if(box[i][j]==0)
{
draw_circle(step_x,step_y,LIGHTBLUE)
break
}
if(j<1)break
step_y=j
judgewho(step_x,step_y)
break
}
case ESC :
break
case SPACE :
if(step_x>=1&&step_x<=18&&step_y>=1&&step_y<=18)
{
if(box[step_x][step_y]==0)
{
box[step_x][step_y]=flag
if(judgeresult(step_x,step_y)==1)
{
sound(1000)
delay(1000)
nosound()
gotoxy(30,4)
if(flag==1)
{
setbkcolor(BLUE)
cleardevice()
setviewport(100,100,540,380,1)
/*定义一个图形窗口*/
setfillstyle(1,2)
/*绿色以实填充*/
setcolor(YELLOW)
rectangle(0,0,439,279)
floodfill(50,50,14)
setcolor(12)
settextstyle(1,0,5)
/*三重笔划字体, 水平放?5倍*/
outtextxy(20,20,"The White Win !")
setcolor(15)
settextstyle(3,0,5)
/*无衬笔划字体, 水平放大5倍*/
outtextxy(120,120,"The White Win !")
setcolor(14)
settextstyle(2,0,8)
getch()
closegraph()
exit(0)
}
if(flag==2)
{
setbkcolor(BLUE)
cleardevice()
setviewport(100,100,540,380,1)
/*定义一个图形窗口*/
setfillstyle(1,2)
/*绿色以实填充*/
setcolor(YELLOW)
rectangle(0,0,439,279)
floodfill(50,50,14)
setcolor(12)
settextstyle(1,0,8)
/*三重笔划字体, 水平放大8倍*/
outtextxy(20,20,"The Red Win !")
setcolor(15)
settextstyle(3,0,5)
/*无衬笔划字体, 水平放大5倍*/
outtextxy(120,120,"The Red Win !")
setcolor(14)
settextstyle(2,0,8)
getch()
closegraph()
exit(0)
}
}
change()
break
}
}
else
break
}
}
void change()
{
if(flag==1)
flag=2
else
flag=1
}
void judgewho(int x,int y)
{
if(flag==1)
draw_circle(x,y,15)
if(flag==2)
draw_circle(x,y,4)
}
int judgeresult(int x,int y)
{
int j,k,n1,n2
while(1)
{
n1=0
n2=0
/*水平向左数*/
for(j=x,k=yj>=1j--)
{
if(box[j][k]==flag)
n1++
else
break
}
/*水平向右数*/
for(j=x,k=yj<=18j++)
{
if(box[j][k]==flag)
n2++
else
break
}
if(n1+n2-1>=5)
{
return(1)
break
}
/*垂直向上数*/
n1=0
n2=0
for(j=x,k=yk>=1k--)
{
if(box[j][k]==flag)
n1++
else
break
}
/*垂直向下数*/
for(j=x,k=yk<=18k++)
{
if(box[j][k]==flag)
n2++
else
break
}
if(n1+n2-1>=5)
{
return(1)
break
}
/*向左上方数*/
n1=0
n2=0
for(j=x,k=yj>=1,k>=1j--,k--)
{
if(box[j][k]==flag)
n1++
else
break
}
/*向右下方数*/
for(j=x,k=yj<=18,k<=18j++,k++)
{
if(box[j][k]==flag)
n2++
else
break
}
if(n1+n2-1>=5)
{
return(1)
break
}
/*向右上方数*/
n1=0
n2=0
for(j=x,k=yj<=18,k>=1j++,k--)
{
if(box[j][k]==flag)
n1++
else
break
}
/*向左下方数*/
for(j=x,k=yj>=1,k<=18j--,k++)
{
if(box[j][k]==flag)
n2++
else
break
}
if(n1+n2-1>=5)
{
return(1)
break
}
return(0)
break
}
}
void main()
{
int gdriver=VGA,gmode=VGAHI
clrscr()
attention()
initgraph(&gdriver,&gmode,"c:\\tc")
/* setwritemode(XOR_PUT)*/
flag=1
draw_box()
do
{
step_x=0
step_y=0
/*draw_circle(step_x,step_y,8)*/
judgewho(step_x-1,step_y-1)
do
{
while(bioskey(1)==0)
key=bioskey(0)
judgekey()
}
while(key!=SPACE&&key!=ESC)
}
while(key!=ESC)
closegraph()
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)