[开源][原创] COLOR LINEZ 游戏
<P>其实这是无意中的闲作,主要是看了一个游戏(不开源),感觉不错,遂我也写了一个,同时测试一下NEO-alpha版.<br><br>规则:同一颜色的五个或五个以上的小球横竖斜在一起即可消失,并得分,看你最终能得多少分。<br>你努力,祝你成功!<br><br>在用NEO-alpha版时遇到一个错误,在我这个程序中就能表现出来,就是鼠标的指针,不好描述<br>.....具体玩玩就知道了,<br><br>永远支持NEO!!!!<br><br>以下为源代码:<br><br>/*==============================================================================<br>SK-CHINA 2006-2007 COLOR LINE BY S.K<br>==============================================================================*/<br>/*==============================================================================<br>预处理部分<br>==============================================================================*/</P><P>#define NEO_temp_dir_unused<br>#define BOARD_COLOR 7</P>
<P>#include <stdio.h><br>#include <stdlib.h><br>#include <string.h><br>#include "neo.h"</P>
<P>/*==============================================================================<br>全局变量部分<br>==============================================================================*/</P>
<P>char chesscolor[9][9]={0}; /* 定义棋盘棋子颜色 */<br>char chessboard[9][9]; /* 定义棋盘空位 */<br>long grade=0; /* 分数 */</P>
<P>/*==============================================================================<br>函数部分<br>==============================================================================*/<br>/*==============================================================================<br>检查棋盘是否已满 满返回1,不满返回0.<br>==============================================================================*/</P>
<P>int boardfull(void) {<br> int i,t; /* 临时计数 */<br> for(i=0;i<9;i++)<br> for(t=0;t<9;t++) if(chessboard[i][t]==1) return 0;<br> return 1;<br>}</P>
<P>/*==============================================================================<br>随机生成棋子.<br>==============================================================================*/</P>
<P>void buildchess(void) {<br> int x,y;<br> do {<br> x=rand()%9;<br> y=rand()%9;<br> }while(chesscolor[y][x]!=0);<br> chesscolor[y][x]=rand()%7+1;<br> chessboard[y][x]=0;<br> delchess(y,x);<br>}</P>
<P>/*==============================================================================<br>绘制棋盘.<br>==============================================================================*/</P>
<P>void drawboard(void) {<br> int i,t; /* 临时计数 */<br> for(i=20;i<420;i+=40) hline(20,i,380,BOARD_COLOR);<br> for(i=20;i<420;i+=40) vline(i,20,380,BOARD_COLOR);<br> for(i=0;i<9;i++)<br> for(t=0;t<9;t++)<br> circlefill(t*40+40,i*40+40,18,chesscolor[i][t]);<br>}</P>
<P>/*==============================================================================<br>判断位于第x行,y列的棋子是否能移动到第to_x行,to_y列,可以返回1,否则返回0.<br>==============================================================================*/</P>
<P>int canmove(int x,int y,int to_x,int to_y) {<br> if(x==to_x && y==to_y) return 1;<br> chessboard[x][y]=0;<br> if(chessboard[x+1][y] && x<8)<br> if(canmove(x+1,y,to_x,to_y)) {<br> chessboard[x][y]=1;<br> return 1;<br> }<br> if(chessboard[x-1][y] && x>0)<br> if(canmove(x-1,y,to_x,to_y)) {<br> chessboard[x][y]=1;<br> return 1;<br> }<br> if(chessboard[x][y+1] && y<8)<br> if(canmove(x,y+1,to_x,to_y)) {<br> chessboard[x][y]=1;<br> return 1;<br> }<br> if(chessboard[x][y-1] && y>0)<br> if(canmove(x,y-1,to_x,to_y)) {<br> chessboard[x][y]=1;<br> return 1;<br> }</P>
<P> chessboard[x][y]=1;<br> return 0;<br>}</P>
<P>/*==============================================================================<br>判断新增棋子后是否可以消去棋子,可以则消去并返回1,否则返回0.<br>==============================================================================*/</P>
<P>int delchess(int x,int y) {<br> int i,j; /* 临时计数 */<br> int sum=0;<br> /* 消除竖行 */<br> for(i=x;i<9;i++) {<br> if(chesscolor[x][y]!=chesscolor[i][y]) break;<br> sum++;<br> }<br> for(i=x;i>-1;i--) {<br> if(chesscolor[x][y]!=chesscolor[i][y]) break;<br> sum++;<br> }<br> if(sum>5) {<br> for(i=x+1;i<9;i++) {<br> if(chesscolor[x][y]!=chesscolor[i][y]) break;<br> chesscolor[i][y]=0;<br> chessboard[i][y]=1;<br> }<br> for(i=x-1;i>-1;i--) {<br> if(chesscolor[x][y]!=chesscolor[i][y]) break;<br> chesscolor[i][y]=0;<br> chessboard[i][y]=1;<br> }<br> chesscolor[x][y]=0;<br> chessboard[x][y]=1;<br> return 1;<br> }<br> sum=0;<br> /* 消除横行 */<br> for(i=y;i<9;i++) {<br> if(chesscolor[x][y]!=chesscolor[x][i]) break;<br> sum++;<br> }<br> for(i=y;i>-1;i--) {<br> if(chesscolor[x][y]!=chesscolor[x][i]) break;<br> sum++;<br> }<br> if(sum>5) {<br> for(i=y+1;i<9;i++) {<br> if(chesscolor[x][y]!=chesscolor[x][i]) break;<br> chesscolor[x][i]=0;<br> chessboard[x][i]=1;<br> }<br> for(i=y-1;i>-1;i--) {<br> if(chesscolor[x][y]!=chesscolor[x][i]) break;<br> chesscolor[x][i]=0;<br> chessboard[x][i]=1;<br> }<br> chesscolor[x][y]=0;<br> chessboard[x][y]=1;<br> return 1;<br> }<br> sum=0;<br> /* 消除斜行( \ ) */<br> for(i=x,j=y;(i<9)&&(j<9);i++,j++) {<br> if(chesscolor[x][y]!=chesscolor[i][j]) break;<br> sum++;<br> }<br> for(i=x,j=y;(i>-1)&&(j>-1);i--,j--) {<br> if(chesscolor[x][y]!=chesscolor[i][j]) break;<br> sum++;<br> }<br> if(sum>5) {<br> for(i=x+1,j=y+1;(i<9)&&(j<9);i++,j++) {<br> if(chesscolor[x][y]!=chesscolor[i][j]) break;<br> chesscolor[i][j]=0;<br> chessboard[i][j]=1;<br> }<br> for(i=x-1,j=y-1;(i>-1)&&(j>-1);i--,j--) {<br> if(chesscolor[x][y]!=chesscolor[i][j]) break;<br> chesscolor[i][j]=0;<br> chessboard[i][j]=1;<br> }<br> chesscolor[x][y]=0;<br> chessboard[x][y]=1;<br> return 1;<br> }<br> sum=0;<br> /* 消除斜行( / ) */<br> for(i=x,j=y;(i<9)&&(j>-1);i++,j--) {<br> if(chesscolor[x][y]!=chesscolor[i][j]) break;<br> sum++;<br> }<br> for(i=x,j=y;(i>-1)&&(j<9);i--,j++) {<br> if(chesscolor[x][y]!=chesscolor[i][j]) break;<br> sum++;<br> }<br> if(sum>5) {<br> for(i=x+1,j=y-1;(i<9)&&(j>-1);i++,j--) {<br> if(chesscolor[x][y]!=chesscolor[i][j]) break;<br> chesscolor[i][j]=0;<br> chessboard[i][j]=1;<br> }<br> for(i=x-1,j=y+1;(i>-1)&&(j<9);i--,j++) {<br> if(chesscolor[x][y]!=chesscolor[i][j]) break;<br> chesscolor[i][j]=0;<br> chessboard[i][j]=1;<br> }<br> chesscolor[x][y]=0;<br> chessboard[x][y]=1;<br> return 1;<br> }<br> return 0;<br>}</P>
<P>/*==============================================================================<br>移动棋子.<br>==============================================================================*/</P>
<P>void movechess(void) {<br> int mousex,mousey;<br> int mousetox,mousetoy;<br> while(1) {<br> while(get_click_info()!=8) ;<br> mousex=get_mouse_x();<br> mousey=get_mouse_y();<br> if(mousex<=20 || mousex>=380) continue;<br> if(mousey<=20 || mousey>=380) continue;<br> mousex=(mousex-20)/40;<br> mousey=(mousey-20)/40;<br> if(chessboard[mousey][mousex]==1) continue;</P>
<P> while(get_click_info()!=8) ;<br> mousetox=get_mouse_x();<br> mousetoy=get_mouse_y();<br> if(mousetox<=20 || mousetox>=380) continue;<br> if(mousetoy<=20 || mousetoy>=380) continue;<br> mousetox=(mousetox-20)/40;<br> mousetoy=(mousetoy-20)/40;<br> if(chessboard[mousetoy][mousetox]==0) continue;</P>
<P> if(canmove(mousey,mousex,mousetoy,mousetox)) {<br> chessboard[mousetoy][mousetox]=0;<br> chessboard[mousey][mousex]=1;<br> chesscolor[mousetoy][mousetox]=chesscolor[mousey][mousex];<br> chesscolor[mousey][mousex]=0;<br> if(delchess(mousetoy,mousetox)) grade+=10;<br> } else continue;<br> break;<br> }<br>}</P>
<P>/*==============================================================================<br>主函数.<br>==============================================================================*/</P>
<P>int main(void) {<br> int i; /* 临时计数 */<br> int n=3;<br> neo_init(); /* 初始化NEO库 */<br> set_video_mode(640,480,8,0,0); /* 640X480X64K模式 */<br> install_keyboard(); /* 加载高级键盘 */<br> _install_timer(); /* 加载时钟 */<br> change_timer(200); /* 改变(时钟频率)鼠标刷新频率为200次/秒 */<br> install_mouse(); /* 加载高级鼠标 */<br> srand(100); /* 初始化随机函数 */</P>
<P> memset(chessboard,1,sizeof(chessboard));</P>
<P> for(i=0;i<n;i++) buildchess();<br> while(!boardfull()) {<br> scare_mouse();<br> drawboard(); /* 绘制棋盘 */<br> gotoxy(1,1);<br> printf("%ld",grade);<br> unscare_mouse();<br> movechess();<br> for(i=0;i<n;i++) if(!boardfull()) buildchess();<br> }<br> scare_mouse();<br> drawboard(); /* 绘制棋盘 */<br> printf("\nGame over.");<br> _getch();<br> return 0;<br>}</P>
[align=right][color=#000066][此贴子已经被作者于2006-12-11 20:46:09编辑过][/color][/align]
<P>不是多人的,是单人的,是用鼠标的,仔细看看<FONT color=#3d11ee><STRONG>规则</STRONG></FONT>.<br></P>
[align=right][color=#000066][此贴子已经被作者于2006-12-12 20:27:23编辑过][/color][/align]
<P>我这边鼠标点没反应啊</P> 当然,这是移动棋子的游戏,当然单击无反映(没有选中表示,因为这只是一个练笔作品),点击需移动的棋子,然后找一个空格,在点击一下就能完成移动. 哦,我以为是五子棋那样的点击的呢,呵呵~~ <P>前辈,请问,我怎么样用win-tc调用库函数</P> <P>进行了一下改进:<BR><BR>/*==============================================================================<BR> SK-CHINA 2006-2007 COLOR LINE BY S.K<BR>==============================================================================*/<BR>/*==============================================================================<BR> 预处理部分<BR>==============================================================================*/</P>
<P>#define NEO_temp_dir_unused<BR>#define BOARD_COLOR 7</P>
<P>#include <stdio.h><BR>#include <stdlib.h><BR>#include <string.h><BR>#include "neo.h"</P>
<P>/*==============================================================================<BR> 全局变量部分<BR>==============================================================================*/</P>
<P>char chesscolor[9][9]={0}; /* 定义棋盘棋子颜色 */<BR>char chessboard[9][9]; /* 定义棋盘空位 */<BR>long grade=0; /* 分数 */</P>
<P>/*==============================================================================<BR> 函数部分<BR>==============================================================================*/<BR>/*==============================================================================<BR> 检查棋盘是否已满 满返回1,不满返回0.<BR>==============================================================================*/</P>
<P>int boardfull(void) {<BR> int i,t; /* 临时计数 */<BR> for(i=0;i<9;i++)<BR> for(t=0;t<9;t++) if(chessboard[i][t]==1) return 0;<BR> return 1;<BR>}</P>
<P>/*==============================================================================<BR> 随机生成棋子.<BR>==============================================================================*/</P>
<P>void buildchess(void) {<BR> int x,y;<BR> do {<BR> x=rand()%9;<BR> y=rand()%9;<BR> }while(chesscolor[y][x]!=0);<BR> chesscolor[y][x]=rand()%7+1;<BR> chessboard[y][x]=0;<BR> delchess(y,x);<BR>}</P>
<P>/*==============================================================================<BR> 绘制整个棋盘(包括棋子).<BR>==============================================================================*/</P>
<P>void drawboard(void) {<BR> int i,t; /* 临时计数 */<BR> for(i=20;i<420;i+=40) hline(20,i,380,BOARD_COLOR);<BR> for(i=20;i<420;i+=40) vline(i,20,380,BOARD_COLOR);<BR> for(i=0;i<9;i++)<BR> for(t=0;t<9;t++)<BR> circlefill(t*40+40,i*40+40,12,chesscolor[i][t]);<BR>}</P>
<P>/*==============================================================================<BR> 判断位于第x行,y列的棋子是否能移动到第to_x行,to_y列,可以返回1,否则返回0.<BR>==============================================================================*/</P>
<P>int canmove(int x,int y,int to_x,int to_y) {<BR> if(x==to_x && y==to_y) return 1;<BR> chessboard[x][y]=0;<BR> if(chessboard[x+1][y] && x<8)<BR> if(canmove(x+1,y,to_x,to_y)) {<BR> chessboard[x][y]=1;<BR> return 1;<BR> }<BR> if(chessboard[x-1][y] && x>0)<BR> if(canmove(x-1,y,to_x,to_y)) {<BR> chessboard[x][y]=1;<BR> return 1;<BR> }<BR> if(chessboard[x][y+1] && y<8)<BR> if(canmove(x,y+1,to_x,to_y)) {<BR> chessboard[x][y]=1;<BR> return 1;<BR> }<BR> if(chessboard[x][y-1] && y>0)<BR> if(canmove(x,y-1,to_x,to_y)) {<BR> chessboard[x][y]=1;<BR> return 1;<BR> }<BR> chessboard[x][y]=1;<BR> return 0;<BR>}</P>
<P>/*==============================================================================<BR> 判断新增棋子后是否可以消去棋子,可以则消去并返回1,否则返回0.<BR>==============================================================================*/</P>
<P>int delchess(int x,int y) {<BR> int i,j; /* 临时计数 */<BR> int sum=0;<BR> /* 消除竖行 */<BR> for(i=x;i<9;i++) {<BR> if(chesscolor[x][y]!=chesscolor[i][y]) break;<BR> sum++;<BR> }<BR> for(i=x;i>-1;i--) {<BR> if(chesscolor[x][y]!=chesscolor[i][y]) break;<BR> sum++;<BR> }<BR> if(sum>5) {<BR> for(i=x+1;i<9;i++) {<BR> if(chesscolor[x][y]!=chesscolor[i][y]) break;<BR> chesscolor[i][y]=0;<BR> chessboard[i][y]=1;<BR> }<BR> for(i=x-1;i>-1;i--) {<BR> if(chesscolor[x][y]!=chesscolor[i][y]) break;<BR> chesscolor[i][y]=0;<BR> chessboard[i][y]=1;<BR> }<BR> chesscolor[x][y]=0;<BR> chessboard[x][y]=1;<BR> return 1;<BR> }<BR> sum=0;<BR> /* 消除横行 */<BR> for(i=y;i<9;i++) {<BR> if(chesscolor[x][y]!=chesscolor[x][i]) break;<BR> sum++;<BR> }<BR> for(i=y;i>-1;i--) {<BR> if(chesscolor[x][y]!=chesscolor[x][i]) break;<BR> sum++;<BR> }<BR> if(sum>5) {<BR> for(i=y+1;i<9;i++) {<BR> if(chesscolor[x][y]!=chesscolor[x][i]) break;<BR> chesscolor[x][i]=0;<BR> chessboard[x][i]=1;<BR> }<BR> for(i=y-1;i>-1;i--) {<BR> if(chesscolor[x][y]!=chesscolor[x][i]) break;<BR> chesscolor[x][i]=0;<BR> chessboard[x][i]=1;<BR> }<BR> chesscolor[x][y]=0;<BR> chessboard[x][y]=1;<BR> return 1;<BR> }<BR> sum=0;<BR> /* 消除斜行( \ ) */<BR> for(i=x,j=y;(i<9)&&(j<9);i++,j++) {<BR> if(chesscolor[x][y]!=chesscolor[i][j]) break;<BR> sum++;<BR> }<BR> for(i=x,j=y;(i>-1)&&(j>-1);i--,j--) {<BR> if(chesscolor[x][y]!=chesscolor[i][j]) break;<BR> sum++;<BR> }<BR> if(sum>5) {<BR> for(i=x+1,j=y+1;(i<9)&&(j<9);i++,j++) {<BR> if(chesscolor[x][y]!=chesscolor[i][j]) break;<BR> chesscolor[i][j]=0;<BR> chessboard[i][j]=1;<BR> }<BR> for(i=x-1,j=y-1;(i>-1)&&(j>-1);i--,j--) {<BR> if(chesscolor[x][y]!=chesscolor[i][j]) break;<BR> chesscolor[i][j]=0;<BR> chessboard[i][j]=1;<BR> }<BR> chesscolor[x][y]=0;<BR> chessboard[x][y]=1;<BR> return 1;<BR> }<BR> sum=0;<BR> /* 消除斜行( / ) */<BR> for(i=x,j=y;(i<9)&&(j>-1);i++,j--) {<BR> if(chesscolor[x][y]!=chesscolor[i][j]) break;<BR> sum++;<BR> }<BR> for(i=x,j=y;(i>-1)&&(j<9);i--,j++) {<BR> if(chesscolor[x][y]!=chesscolor[i][j]) break;<BR> sum++;<BR> }<BR> if(sum>5) {<BR> for(i=x+1,j=y-1;(i<9)&&(j>-1);i++,j--) {<BR> if(chesscolor[x][y]!=chesscolor[i][j]) break;<BR> chesscolor[i][j]=0;<BR> chessboard[i][j]=1;<BR> }<BR> for(i=x-1,j=y+1;(i>-1)&&(j<9);i--,j++) {<BR> if(chesscolor[x][y]!=chesscolor[i][j]) break;<BR> chesscolor[i][j]=0;<BR> chessboard[i][j]=1;<BR> }<BR> chesscolor[x][y]=0;<BR> chessboard[x][y]=1;<BR> return 1;<BR> }<BR> return 0;<BR>}</P>
<P>/*==============================================================================<BR> 移动棋子.<BR>==============================================================================*/</P>
<P>void movechess(void) {<BR> int mousex,mousey;<BR> int mousetox,mousetoy;<BR> while(1) {<BR> scare_mouse();<BR> drawboard(); /* 绘制棋盘 */<BR> rectfill(0,0,640,16,0);<BR> neo_printf(0,0,"当前分数:%ld",grade);<BR> unscare_mouse();<BR> while(get_click_info()!=8) ;<BR> mousex=get_mouse_x();<BR> mousey=get_mouse_y();<BR> if(mousex<=20 || mousex>=380) continue;<BR> if(mousey<=20 || mousey>=380) continue;<BR> mousex=(mousex-20)/40;<BR> mousey=(mousey-20)/40;<BR> if(chessboard[mousey][mousex]==1) continue;<BR> rect(mousex*40+20,mousey*40+20,mousex*40+60,mousey*40+60,4);<BR> while(get_click_info()!=8) ;<BR> mousetox=get_mouse_x();<BR> mousetoy=get_mouse_y();<BR> if(mousetox<=20 || mousetox>=380) continue;<BR> if(mousetoy<=20 || mousetoy>=380) continue;<BR> mousetox=(mousetox-20)/40;<BR> mousetoy=(mousetoy-20)/40;<BR> if(chessboard[mousetoy][mousetox]==0) continue;</P>
<P> if(canmove(mousey,mousex,mousetoy,mousetox)) {<BR> chessboard[mousetoy][mousetox]=0;<BR> chessboard[mousey][mousex]=1;<BR> chesscolor[mousetoy][mousetox]=chesscolor[mousey][mousex];<BR> chesscolor[mousey][mousex]=0;<BR> if(delchess(mousetoy,mousetox)) {<BR> grade+=10;<BR> continue;<BR> }<BR> } else continue;<BR> break;<BR> }<BR>}</P>
<P>/*==============================================================================<BR> 主函数.<BR>==============================================================================*/</P>
<P>int main(void) {<BR> int i; /* 临时计数 */<BR> int n=3;<BR> neo_init(); /* 初始化NEO库 */<BR> set_video_mode(640,480,8,0,0); /* 640X480X64K模式 */<BR> install_keyboard(); /* 加载高级键盘 */<BR> _install_timer(); /* 加载时钟 */<BR> change_timer(500); /* 改变(时钟频率)鼠标刷新频率为500次/秒 */<BR> install_mouse(); /* 加载高级鼠标 */<BR> srand(100); /* 初始化随机函数 */</P>
<P> memset(chessboard,1,sizeof(chessboard));</P>
<P> for(i=0;i<n;i++) buildchess();<BR> while(!boardfull()) {<BR> movechess();<BR> for(i=0;i<n;i++) if(!boardfull()) buildchess();<BR> }<BR> scare_mouse();<BR> drawboard(); /* 绘制棋盘 */<BR> rectfill(0,0,640,16,0);<BR> neo_printf(0,0,"游戏结束,你的最终得分:%ld,谢谢你的使用",grade);<BR> _getch();<BR> return 0;<BR>}</P> 楼主能否再给我发一份中国象棋社?以前那个似乎下不了了,你论坛里的解压有问题。<BR>我的邮箱:ckerhome@yahoo.com.cn <DIV class=quote><B>以下是引用<U>一笔苍穹</U>在2007-5-29 15:03:42的发言:</B><BR>楼主能否再给我发一份中国象棋社?以前那个似乎下不了了,你论坛里的解压有问题。<BR>我的邮箱:ckerhome@yahoo.com.cn</DIV>
<p>看看这个,又传了一下<BR>[attach]21735[/attach]<BR> <P>在TC++中编译的时候出现一个错误<BR>提示是#include "neo.h"这个错误<BR>这样的话我应该怎么修改才可以运行呢???<BR>谢谢楼主,你真的太强了,佩服ing</P> 你得先把NEO的所有头文件拷到TC或WIN-TC或BC的INCLUDE文件夹下<BR>下载可以到NEO资源站:<BR><a href="http://www.ds0101.com/neosdk" target="_blank" >http://www.ds0101.com/neosdk</A> [attach]22666[/attach]<BR>[attach]22667[/attach]<BR> colorlinez论坛 :<a href="http://colorlinez.5d6d.com/index.php" target="_blank" >http://colorlinez.5d6d.com/index.php</A><BR>Color Linez QQ 群 35901293,欢迎加入<BR>Color Linez百度贴吧,<a href="http://post.baidu.com/f?kw=color%5Flinez" target="_blank" >http://post.baidu.com/f?kw=color%5Flinez</A>,欢迎访问<BR>论坛和群里面有上万分的高手
页:
[1]
