C语言实现COLOR LINEZ游戏
2010-10-08 10:46:22 来源:WEB开发网 闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌熼梻瀵割槮缁炬儳缍婇弻鐔兼⒒鐎靛壊妲紒鐐劤缂嶅﹪寮婚悢鍏尖拻閻庨潧澹婂Σ顔剧磼閻愵剙鍔ょ紓宥咃躬瀵鎮㈤崗灏栨嫽闁诲酣娼ф竟濠偽i鍓х<闁绘劦鍓欓崝銈囩磽瀹ュ拑韬€殿喖顭烽幃銏ゅ礂鐏忔牗瀚介梺璇查叄濞佳勭珶婵犲伣锝夘敊閸撗咃紲闂佺粯鍔﹂崜娆撳礉閵堝洨纾界€广儱鎷戦煬顒傗偓娈垮枛椤兘骞冮姀銈呯閻忓繑鐗楃€氫粙姊虹拠鏌ュ弰婵炰匠鍕彾濠电姴浼i敐澶樻晩闁告挆鍜冪床闂備浇顕栭崹搴ㄥ礃閿濆棗鐦遍梻鍌欒兌椤㈠﹤鈻嶉弴銏犵闁搞儺鍓欓悘鎶芥煛閸愩劎澧曠紒鈧崘鈹夸簻闊洤娴烽ˇ锕€霉濠婂牏鐣洪柡灞诲妼閳规垿宕卞▎蹇撴瘓缂傚倷闄嶉崝搴e垝椤栫偛桅闁告洦鍨扮粻鎶芥倵閿濆簼绨藉ù鐘荤畺濮婃椽妫冨☉娆愭倷闁诲孩鐭崡鎶芥偘椤曗偓瀹曞爼顢楁径瀣珫婵犳鍣徊鍓р偓绗涘洤绠查柛銉墮閽冪喖鏌i弬鎸庢喐闁荤喎缍婇弻娑⑩€﹂幋婵囩亪濡炪値鍓欓悧鍡涒€旈崘顔嘉ч幖绮光偓鑼嚬缂傚倷绶¢崰妤呭箰閹间焦鍋╅柣鎴f绾偓闂佺粯鍔曠粔闈浳涢崘顔兼槬闁逞屽墯閵囧嫰骞掗幋婵愪紑閻庤鎸风粈渚€鍩為幋锔藉亹闁圭粯甯╂导鈧紓浣瑰劤瑜扮偟鍒掑▎鎾宠摕婵炴垶鐭▽顏堟煙鐟欏嫬濮囨い銉︾箞濮婃椽鏌呴悙鑼跺濠⒀傚嵆閺岀喖鎼归锝呯3闂佹寧绻勯崑娑㈠煘閹寸姭鍋撻敐搴樺亾椤撴稒娅婇柡灞界У濞碱亪骞忕仦钘夊腐闂備焦鐪归崐鏇㈠箠閹邦喗顫曢柟鎯х摠婵挳鏌涢幘鏉戠祷闁告挸宕—鍐Χ閸℃浠搁梺鑽ゅ暱閺呮盯鎮鹃悜钘壩ㄧ憸澶愬磻閹剧粯鏅查幖绮瑰墲閻忓秹姊虹紒妯诲鞍婵炲弶锕㈡俊鐢稿礋椤栨氨鐤€闂傚倸鐗婄粙鎰姳閼测晝纾藉ù锝堟閻撴劖鎱ㄥΟ绋垮婵″弶鍔欓獮妯兼嫚閼碱剦妲伴梻浣稿暱閹碱偊宕愭繝姣稿洭寮舵惔鎾存杸濡炪倖姊婚妴瀣啅閵夛负浜滄い鎾跺仜濡插鏌i敐鍥у幋妤犵偞甯¢獮瀣籍閳ь剟鎮楁繝姘拺閻熸瑥瀚崕妤呮煕濡 鍋撻悢鎻掑緧婵犵數濮烽弫鍛婃叏閻戣棄鏋侀柛娑橈攻閸欏繑銇勯幘鍗炵仼缁炬儳顭烽弻鐔煎礈瑜忕敮娑㈡煃闁垮鐏﹂柕鍥у楠炴帡宕卞鎯ь棜缂傚倸鍊风粈渚€藝闁秴鏋佸┑鐘虫皑瀹撲線鏌涢埄鍐姇闁稿﹦鍏橀弻娑樷攽閸℃浼€濡炪倖姊归崝鏇㈠煘閹达附鍊婚柛銉㈡櫇鏍¢梻浣告啞閹稿鎮烽敂鐣屸攳濠电姴娲﹂崵鍐煃閸濆嫬鏆熼柨娑欑矒濮婇缚銇愰幒鎴滃枈闂佸憡鐟ユ鎼佸煝閹炬枼鍫柛顐ゅ枔閸樻悂鏌h箛鏇炰户缁绢厼鐖煎畷鎴﹀箻鐠囪尙鐤€婵炶揪绲介幉锟犲磹椤栫偞鈷戠痪顓炴噹娴滃綊鎮跺☉鏍у姦闁糕斁鍋撳銈嗗笒閸燁偊鎯冨ú顏呯厸濞达絽婀辨晶顏堟煃鐟欏嫬鐏撮柟顔界懇瀵爼骞嬮悩杈敇闂傚倷绀佸﹢杈ㄧ仚闂佺濮ょ划搴ㄥ礆閹烘绫嶉柛顐ゅ枎娴犺櫣绱撴担鍓插創妞ゆ洘濞婇弫鍐磼濞戞艾骞堥梻浣告惈濞层垽宕濆畝鍕€堕柣妯肩帛閻撴洟鏌熼懜顒€濡煎ù婊勫劤閳规垿鏁嶉崟顐℃澀闂佺ǹ锕ラ悧鐘茬暦濠靛鏅濋柍褜鍓熼垾锕傚锤濡も偓閻掑灚銇勯幒宥堝厡缂佺姴澧介埀顒€鍘滈崑鎾斥攽閻樿京绐旈柛瀣殔閳规垿顢欑涵鐑界反濠电偛鎷戠徊鍨i幇鏉跨闁瑰啿纾崰鎾诲箯閻樼粯鍤戦柤绋跨仛濮f劙姊婚崒姘偓鐑芥嚄閼哥數浠氭繝鐢靛仜椤曨參宕楀Ο渚殨妞ゆ劑鍊栫€氭氨鈧懓澹婇崰鏍р枔閵婏妇绡€闁汇垽娼ф牎缂佺偓婢樼粔鐟邦嚕閺屻儱绠甸柟鐑樼箘閸炵敻鏌i悩鐑橆仩閻忓繈鍔岄蹇涘Ψ瑜夐崑鎾舵喆閸曨剙纰嶅┑鈽嗗亝缁诲倿锝炶箛娑欐優闁革富鍘鹃敍婊冣攽閳藉棗鐏犻柟纰卞亰閿濈偛顓奸崶鈺冿紳婵炶揪缍侀ˉ鎾诲礉瀹ュ鐓欑紒瀣仢閺嗛亶鏌i敐鍥у幋妤犵偛顑夐弫鍐焵椤掑倻涓嶅┑鐘崇閸嬶綁鏌涢妷鎴濆暟妤犲洭鎮楃憴鍕碍缂佸鎸抽垾鏃堝礃椤斿槈褔鏌涢埄鍏狀亪妫勫鍥╃=濞达絽澹婇崕鎰版煕閵娿儱顣崇紒顔碱儏椤撳吋寰勭€n亖鍋撻柨瀣ㄤ簻闁瑰搫绉堕ˇ锔锯偓娈垮枛閻忔繈鍩為幋锕€鐓¢柛鈩冾殘娴狀垶姊洪崨濠庣劶闁告洦鍙庡ú鍛婁繆閵堝繒鍒伴柛鐕佸灦瀹曟劙宕归锝呭伎濠碘槅鍨抽崢褎绂嶆ィ鍐╁€垫慨妯煎亾鐎氾拷

核心提示:/*===预处理部分===*/#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...
- ››游戏圈第一款巧克力周边即将浮出水面
更多精彩
赞助商链接