快捷搜索:

C语言实现COLOR LINEZ游戏

==============================================================================*/

#define NEO_temp_dir_unused

#define BOARD_COLOR 7

#include

#include

#include

#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

您可能还会对下面的文章感兴趣: