C语言实现COLOR LINEZ游戏
2010-10-08 10:46:22 来源:WEB开发网核心提示:/*===预处理部分===*/#define NEO_temp_dir_unused#define BOARD_COLOR 7#include <stdio.h>#include <stdlib.h>#include <string.h>#include "neo.h&qu
/*=========================================================================== 预处理部分 ===========================================================================*/ #define NEO_temp_dir_unused #define BOARD_COLOR 7 #include <stdio.h> #include <stdlib.h> #include <string.h> #include "neo.h" /*=========================================================================== 全局变量部分 ===========================================================================*/ char chesscolor[9][9]={0}; /* 定义棋盘棋子颜色 */ char chessboard[9][9]; /* 定义棋盘空位 */ long grade=0; /* 分数 */ /*=========================================================================== 函数部分 ===========================================================================*/ /*=========================================================================== 检查棋盘是否已满 满返回1,不满返回0. ===========================================================================*/ int boardfull(void) { int i,t; /* 临时计数 */ for(i=0;i<9;i++) for(t=0;t<9;t++) if(chessboard[i][t]==1) return 0; return 1; } /*=========================================================================== 随机生成棋子. ===========================================================================*/ void buildchess(void) { int x,y; do { x=rand()%9; y=rand()%9; }while(chesscolor[y][x]!=0); chesscolor[y][x]=rand()%7+1; chessboard[y][x]=0; delchess(y,x); } /*=========================================================================== 绘制整个棋盘(包括棋子). ===========================================================================*/ void drawboard(void) { int i,t; /* 临时计数 */ for(i=20;i<420;i+=40) hline(20,i,380,BOARD_COLOR); for(i=20;i<420;i+=40) vline(i,20,380,BOARD_COLOR); for(i=0;i<9;i++) for(t=0;t<9;t++) circlefill(t*40+40,i*40+40,12,chesscolor[i][t]); } /*=========================================================================== 判断位于第x行,y列的棋子是否能移动到第to_x行,to_y列,可以返回1,否则返回0. ===========================================================================*/ int canmove(int x,int y,int to_x,int to_y) { if(x==to_x && y==to_y) return 1; chessboard[x][y]=0; if(chessboard[x+1][y] && x<8) if(canmove(x+1,y,to_x,to_y)) { chessboard[x][y]=1; return 1; } if(chessboard[x-1][y] && x>0) if(canmove(x-1,y,to_x,to_y)) { chessboard[x][y]=1; return 1; } if(chessboard[x][y+1] && y<8) if(canmove(x,y+1,to_x,to_y)) { chessboard[x][y]=1; return 1; } if(chessboard[x][y-1] && y>0) if(canmove(x,y-1,to_x,to_y)) { chessboard[x][y]=1; return 1; } chessboard[x][y]=1; return 0; } /*=========================================================================== 判断新增棋子后是否可以消去棋子,可以则消去并返回1,否则返回0. ===========================================================================*/ int delchess(int x,int y) { int i,j; /* 临时计数 */ int sum=0; /* 消除竖行 */ for(i=x;i<9;i++) { if(chesscolor[x][y]!=chesscolor[i][y]) break; sum++; } for(i=x;i>-1;i--) { if(chesscolor[x][y]!=chesscolor[i][y]) break; sum++; } if(sum>5) { for(i=x+1;i<9;i++) { if(chesscolor[x][y]!=chesscolor[i][y]) break; chesscolor[i][y]=0; chessboard[i][y]=1; } for(i=x-1;i>-1;i--) { if(chesscolor[x][y]!=chesscolor[i][y]) break; chesscolor[i][y]=0; chessboard[i][y]=1; } chesscolor[x][y]=0; chessboard[x][y]=1; return 1; } sum=0; /* 消除横行 */ for(i=y;i<9;i++) { if(chesscolor[x][y]!=chesscolor[x][i]) break; sum++; } for(i=y;i>-1;i--) { if(chesscolor[x][y]!=chesscolor[x][i]) break; sum++; } if(sum>5) { for(i=y+1;i<9;i++) { if(chesscolor[x][y]!=chesscolor[x][i]) break; chesscolor[x][i]=0; chessboard[x][i]=1; } for(i=y-1;i>-1;i--) { if(chesscolor[x][y]!=chesscolor[x][i]) break; chesscolor[x][i]=0; chessboard[x][i]=1; } chesscolor[x][y]=0; chessboard[x][y]=1; return 1; } sum=0; /* 消除斜行( ) */ for(i=x,j=y;(i<9)&&(j<9);i++,j++) { if(chesscolor[x][y]!=chesscolor[i][j]) break; sum++; } for(i=x,j=y;(i>-1)&&(j>-1);i--,j--) { if(chesscolor[x][y]!=chesscolor[i][j]) break; sum++; } if(sum>5) { for(i=x+1,j=y+1;(i<9)&&(j<9);i++,j++) { if(chesscolor[x][y]!=chesscolor[i][j]) break; chesscolor[i][j]=0; chessboard[i][j]=1; } for(i=x-1,j=y-1;(i>-1)&&(j>-1);i--,j--) { if(chesscolor[x][y]!=chesscolor[i][j]) break; chesscolor[i][j]=0; chessboard[i][j]=1; } chesscolor[x][y]=0; chessboard[x][y]=1; return 1; } sum=0; /* 消除斜行( / ) */ for(i=x,j=y;(i<9)&&(j>-1);i++,j--) { if(chesscolor[x][y]!=chesscolor[i][j]) break; sum++; } for(i=x,j=y;(i>-1)&&(j<9);i--,j++) { if(chesscolor[x][y]!=chesscolor[i][j]) break; sum++; } if(sum>5) { for(i=x+1,j=y-1;(i<9)&&(j>-1);i++,j--) { if(chesscolor[x][y]!=chesscolor[i][j]) break; chesscolor[i][j]=0; chessboard[i][j]=1; } for(i=x-1,j=y+1;(i>-1)&&(j<9);i--,j++) { if(chesscolor[x][y]!=chesscolor[i][j]) break; chesscolor[i][j]=0; chessboard[i][j]=1; } chesscolor[x][y]=0; chessboard[x][y]=1; return 1; } return 0; } /*=========================================================================== 移动棋子. ===========================================================================*/ void movechess(void) { int mousex,mousey; int mousetox,mousetoy; while(1) { scare_mouse(); drawboard(); /* 绘制棋盘 */ rectfill(0,0,640,16,0); neo_printf(0,0,"当前分数:%ld",grade); unscare_mouse(); while(get_click_info()!=8) ; mousex=get_mouse_x(); mousey=get_mouse_y(); if(mousex<=20 || mousex>=380) continue; if(mousey<=20 || mousey>=380) continue; mousex=(mousex-20)/40; mousey=(mousey-20)/40; if(chessboard[mousey][mousex]==1) continue; rect(mousex*40+20,mousey*40+20,mousex*40+60,mousey*40+60,4); while(get_click_info()!=8) ; mousetox=get_mouse_x(); mousetoy=get_mouse_y(); if(mousetox<=20 || mousetox>=380) continue; if(mousetoy<=20 || mousetoy>=380) continue; mousetox=(mousetox-20)/40; mousetoy=(mousetoy-20)/40; if(chessboard[mousetoy][mousetox]==0) continue; if(canmove(mousey,mousex,mousetoy,mousetox)) { chessboard[mousetoy][mousetox]=0; chessboard[mousey][mousex]=1; chesscolor[mousetoy][mousetox]=chesscolor[mousey][mousex]; chesscolor[mousey][mousex]=0; if(delchess(mousetoy,mousetox)) { grade+=10; continue; } } else continue; break; } } /*=========================================================================== 主函数. ===========================================================================*/ int main(void) { int i; /* 临时计数 */ int n=3; neo_init(); /* 初始化NEO库 */ set_video_mode(640,480,8,0,0); /* 640X480X64K模式 */ install_keyboard(); /* 加载高级键盘 */ _install_timer(); /* 加载时钟 */ change_timer(500); /* 改变(时钟频率)鼠标刷新频率为500次/秒 */ install_mouse(); /* 加载高级鼠标 */ srand(100); /* 初始化随机函数 */ memset(chessboard,1,sizeof(chessboard)); for(i=0;i<n;i++) buildchess(); while(!boardfull()) { movechess(); for(i=0;i<n;i++) if(!boardfull()) buildchess(); } scare_mouse(); drawboard(); /* 绘制棋盘 */ rectfill(0,0,640,16,0); neo_printf(0,0,"游戏结束,你的最终得分:%ld,谢谢你的使用",grade); _getch(); return 0; }
- ››游戏定位成牵引Android发展的火车头
- ››游戏场景烘焙贴图制作
- ››游戏植物大战僵尸 iPhone 版9天销售额超100万美元...
- ››游戏开发包 iPhone cocos2d 初体验
- ››游戏三维怪物施法特效教程
- ››游戏人生Silverlight(2) - 趣味钢琴[Silverlight ...
- ››游戏人生Silverlight(3) - 打苍蝇[Silverlight 2....
- ››游戏人生Silverlight(4) - 连连看[Silverlight 2....
- ››游戏人生Silverlight(5) - 星际竞技场[Silverligh...
- ››游戏《封神榜》人物纣王3DMAX制作全过程
- ››游戏加速器中的领头羊-网际速递
- ››游戏引擎Valve Source奔向Linux
更多精彩
赞助商链接