2
点击“功能设置”,然后点击“设置”。
3
设置JS接口安全域名。这里填写的是一级域名,不带www和http。最多可以设置三个域名。设置完后点击确定。(多说一句,相比以前的分享没有任何域名限制,这里设置安全域名,目的是为了当发现此公众平台发现诱导分享行为时,可以根据此域名追溯到所有分享出去的链接,以及通过这些链接增加的粉丝。这样,微信就可以牢牢控制了你的微信平台,一旦发现违规,让分享链接失效,删除掉诱导行为增加的粉丝,是瞬间就可以完成的。因此,微信平台的开发者,一定要合理来使用分享功能,不要因小失大。等到你的微信平台被封,估计哭都来不及)
4
在开发者中心中获取你的AppID和AppSecret,接下来在获取令牌时,需要这两个信息。
5
获取令牌。在服务器端完成,代码如下:
function wx_get_token() {
$token = S('access_token')
if (!$token) {
$res = file_get_contents('https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='.'你的AppID'.'&secret='.'你的AppSecret')
$res = json_decode($res, true)
$token = $res['access_token']
// 注意:这里需要将获取到的token缓存起来(或写到数据库中)
// 不能频繁的访问https://api.weixin.qq.com/cgi-bin/token,每日有次数限制
// 通过此接口返回的token的有效期目前为2小时。令牌失效后,JS-SDK也就不能用了。
// 因此,这里将token值缓存1小时,比2小时小。缓存失效后,再从接口获取新的token,这样
// 就可以避免token失效。
// S()是ThinkPhp的缓存函数,如果使用的是不ThinkPhp框架,可以使用你的缓存函数,或使用数据库来保存。
S('access_token', $token, 3600)
}
return $token
}
注意:返回的access_token长度至少要留够512字节。接口返回值:
{"access_token":"ACCESS_TOKEN","expires_in":7200}
{"access_token":"vdlThyTfyB0N5eMoi3n_aMFMKPuwkE0MgyGf_0h0fpzL8p_hsdUX8VGxz5oSXuq5dM69lxP9wBwN9Yzg-0kVHY33BykRC0YXZZZ-WdxEic4","expires_in":7200}
6
获取jsapi的ticket。jsapi_ticket是公众号用于调用微信JS接口的临时票据。正常情况下,jsapi_ticket的有效期为7200秒,通过access_token来获取。
function wx_get_jsapi_ticket(){
$ticket = ""
do{
$ticket = S('wx_ticket')
if (!empty($ticket)) {
break
}
$token = S('access_token')
if (empty($token)){
wx_get_token()
}
$token = S('access_token')
if (empty($token)) {
logErr("get access token error.")
break
}
$url2 = sprintf("https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=%s&type=jsapi",
$token)
$res = file_get_contents($url2)
$res = json_decode($res, true)
$ticket = $res['ticket']
// 注意:这里需要将获取到的ticket缓存起来(或写到数据库中)
// ticket和token一样,不能频繁的访问接口来获取,在每次获取后,我们把它保存起来。
S('wx_ticket', $ticket, 3600)
}while(0)
return $ticket
}
接口返回值:
{"errcode":0,"errmsg":"ok","ticket":"sM4AOVdWfPE4DxkXGEs8VMKv7FMCPm-I98-klC6SO3Q3AwzxqljYWtzTCxIH9hDOXZCo9cgfHI6kwbe_YWtOQg","expires_in":7200}
7
签名,将jsapi_ticket、noncestr、timestamp、分享的url按字母顺序连接起来,进行sha1签名。
noncestr是你设置的任意字符串。
timestamp为时间戳。
$timestamp = time()
$wxnonceStr = "任意字符串"
$wxticket = wx_get_jsapi_ticket()
$wxOri = sprintf("jsapi_ticket=%s&noncestr=%s×tamp=%s&url=%s",
$wxticket, $wxnonceStr, $timestamp,
'要分享的url(从http开始,如果有参数,包含参数)'
)
$wxSha1 = sha1($wxOri)
END
步骤2 添加JS代码
生成签名后,就可以使用js代码了。在你的html中,进行如下设置即可。
<script type="text/javascript" src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>
<script type="text/javascript">
// 微信配置
wx.config({
debug: false,
appId: "你的AppID",
timestamp: '上一步生成的时间戳',
nonceStr: '上一步中的字符串',
signature: '上一步生成的签名',
jsApiList: ['onMenuShareTimeline', 'onMenuShareAppMessage'] // 功能列表,我们要使用JS-SDK的什么功能
})
// config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,所以如果需要在 页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready 函数中。
wx.ready(function(){
// 获取“分享到朋友圈”按钮点击状态及自定义分享内容接口
wx.onMenuShareTimeline({
title: '分享标题', // 分享标题
link:"分享的url,以http或https开头",
imgUrl: "分享图标的url,以http或https开头" // 分享图标
})
// 获取“分享给朋友”按钮点击状态及自定义分享内容接口
wx.onMenuShareAppMessage({
title: '分享标题', // 分享标题
desc: "分享描述", // 分享描述
link:"分享的url,以http或https开头",
imgUrl: "分享图标的url,以http或https开头", // 分享图标
type: 'link', // 分享类型,music、video或link,不填默认为link
})
})
</script>
/* Note:Your choice is C IDE */#include "stdio.h"
#include "stdlib.h"
#include "ctype.h"
#include "string.h"
#include "math.h"
typedef float dd[5]
dd a //输入的4个数
dd b //4个数计算后剩余的3个数
dd c //3个数计算后剩余的2个数
int num=0
char temp1[200]//用于存储4个数中任意2个数参与运算的表达式
char temp2[200]//用于存储3个数中任意2个数参与运算的表达式
void js4() //4个数参与运算
void js3() //3个数参与运算
void js2() //2个数参与运算
void main()
{
int i
printf("输入4个小于10的正整数:")
for(i=1i<=4i++)
{
scanf("%f",&a[i])
if(a[i]<1 || a[i]>10)
{
printf("输入数字有误!")
return
}
}
js4()
if(num==0)
{
printf("\n对不起,没有可行的算法!")
}
}
void js4()
{
int i,j,k,m
for(i=1i<=4i++) //取遍4个数a[1],a[2],a[3],a[4]
{
for(j=i+1j<=4j++) //与其后每个数进行组合
{
m=2 //找到没参与运算的数
for(k=1k<=4k++)
{
if(k!=i &&k!=j)
{
b[m]=a[k]
m=m+1
}
}
//进行四则运算,并记录表达式(备用)
//加
b[1]=a[i]+a[j]
sprintf(temp1,"%0.2f+%0.2f=%0.2f",a[i],a[j],b[1])
js3()
//减
if(a[i]>a[j])
{
b[1]=a[i]-a[j]
sprintf(temp1,"%0.2f-%0.2f=%0.2f",a[i],a[j],b[1])
}
else
{
b[1]=a[j]-a[i]
sprintf(temp1,"%0.2f-%0.2f=%0.2f",a[j],a[i],b[1])
}
js3()
//乘
b[1]=a[i]*a[j]
sprintf(temp1,"%0.2f*%0.2f=%0.2f",a[i],a[j],b[1])
js3()
//除
if(a[i]>a[j] &&a[j]!=0)
{
b[1]=a[i]/a[j]
sprintf(temp1,"%0.2f/%0.2f=%0.2f",a[i],a[j],b[1])
}
else if(a[i]!=0 &&a[j]!=0)
{
b[1]=a[j]/a[i]
sprintf(temp1,"%0.2f/%0.2f=%0.2f",a[j],a[i],b[1])
}
js3()
}
}
}
void js3()
{
int i,j,k,m
for(i=1i<=3i++) //取遍3个数a[1],a[2],a[3],a[4]
{
for(j=i+1j<=3j++) //与其后每个数进行组合
{
m=2 //找到没参与运算的数
for(k=1k<=3k++)
{
if(k!=i &&k!=j)
{
c[m]=b[k]
m=m+1
}
}
//进行四则运算,并记录表达式(备用)
//加
c[1]=b[i]+b[j]
sprintf(temp2,"%0.2f+%0.2f=%0.2f",b[i],b[j],c[1])
js2()
//减
if(b[i]>b[j])
{
c[1]=b[i]-b[j]
sprintf(temp2," %0.2f-%0.2f=%0.2f",b[i],b[j],c[1])
}
else
{
c[1]=b[j]-b[i]
sprintf(temp2," %0.2f-%0.2f=%0.2f",b[j],b[i],c[1])
}
js2()
//乘
c[1]=b[i]*b[j]
sprintf(temp2," %0.2f*%0.2f=%0.2f",b[i],b[j],c[1])
js2()
//除
if(b[i]>b[j] &&b[j]!=0)
{
c[1]=b[i]/b[j]
sprintf(temp2," %0.2f/%0.2f=%0.2f",b[i],b[j],c[1])
}
else if(b[i]!=0 &&b[j]!=0)
{
c[1]=b[j]/b[i]
sprintf(temp2," %0.2f/%0.2f=%0.2f",b[j],b[i],c[1])
}
js2()
}
}
}
void js2()
{
//对最后2个数的四则运算最终结果进行判断,将满足条件的情况输出
//加
if(c[1]+c[2]==24)
{
printf("%s\t%s\t%f+%0.2f=24\n",temp1,temp2,c[1],c[2])
num=num+1
}
//减
if(c[1]-c[2]==24)
{
printf("%s\t%s\t%f-%0.2f=24\n",temp1,temp2,c[1],c[2])
num=num+1
}
else if(c[2]-c[1]==24)
{
printf("%s\t%s\t%f-%0.2f=24\n",temp1,temp2,c[2],c[1])
num=num+1
}
//乘
if(c[1]*c[2]==24)
{
printf("%s\t%s\t%f*%0.2f=24\n",temp1,temp2,c[1],c[2])
num=num+1
}
//除
if(c[1]>c[2] &&c[2]!=0)
{
if(c[1]/c[2]==24)
{
printf("%s\t%s\t%f/%0.2f=24\n",temp1,temp2,c[1],c[2])
num=num+1
}
}
else if(c[2]>c[1] &&c[1]!=0)
{
if(c[2]/c[1]==24)
{
printf("%s\t%s\t%f/%0.2f=24\n",temp1,temp2,c[2],c[1])
num=num+1
}
}
}
黑白棋游戏#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()
}