大家好~~自己写的小游戏哦!来看看吧!暂时开发到一半~~
我花4天赶出来一半的游戏请大家指出错误或需要改进之处哦
我只学了半年的c语言。。
技术略菜
好吧,下面直接放代码
程序代码:
#include<stdio.h> #include<windows.h> #include<stdlib.h> #include<time.h> #include<conio.h> #include<math.h> #include<algorithm> #define KEY_DOWN(VK_NONAME) ((GetAsyncKeyState(VK_NONAME) & 0x8000) ? 1:0) void sxy(int x,int y); void rand_start(int n); int ate(); int rbh(int s,int e); int srt[10][2];//星星坐标 int x=3,y=1;//玩家1坐标 x是纵 y是横 int a=4,b=1;//玩家2坐标 a是纵 b是横 int rbh(int s,int e)//随机数的生成 { int dis= e-s; return rand()%dis+s; } void sxy(int x,int y) { COORD pos = {y,x}; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos); CONSOLE_CURSOR_INFO info = {1, 0}; SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &info); } void rand_start(int n)//按照序号n随机生成第n个星星的坐标 { srt[n][0]=rbh(2,31); srt[n][1]=rbh(15,63); } int ate(int n)//判断是否吃星 { if(n==1)//如果n是1,判断玩家1 { for(int i=0;i<10;i++)//遍历所有星星的坐标 { if(x==srt[i][0]&&y==srt[i][1])//如果坐标重叠为吃了星星,返回星星的序号 return i; } } else if(n==2)//如果n是2,判断玩家2 { for(int i=0;i<10;i++)//遍历所有星星的坐标 { if(a==srt[i][0]&&b==srt[i][1])//如果坐标重叠为吃了星星,返回星星的序号 return i; } } return -1;//如果没吃,返回-1 } void SetColor(unsigned short ForeColor,unsigned short BackGroundColor) { HANDLE hCon=GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleTextAttribute(hCon,(ForeColor%16)|(BackGroundColor%16*16)); } void star() { system("title 点点大作战"); int i=0; while(1) { printf("\n\n\n\n\t\t点击屏幕开始游戏...."); if(KEY_DOWN(MOUSE_MOVED)) break; else { SetColor(15,i); Sleep(50); if(KEY_DOWN(MOUSE_MOVED)) break; else Sleep(50); if(KEY_DOWN(MOUSE_MOVED)) break; else Sleep(50); if(KEY_DOWN(MOUSE_MOVED)) break; else Sleep(50); } i++; if(i==15) i++; system("cls"); } SetColor(15,0); system("cls"); } int double_game() { x=3; y=1; a=4; b=1; system("cls"); system("title 双人模式~~~~"); int i,st,yfen=0,efen=0,alv=1,blv=1; char ch; i=0; for(i=0;i<10;i++) rand_start(i); for(i=0;i<10;i++) { sxy(srt[i][0],srt[i][1]); printf("%c",4); } SetColor(15,0); sxy(0,0); printf("%c 玩家1分数:%03d %c 玩家2分数:%03d",2,yfen,1,efen); sxy(1,0); printf("%c 玩家1等级:%03d %c 玩家2等级:%03d",2,alv,1,blv); while(1) { SetColor(15,0); sxy(x,y); printf("%c",2); sxy(a,b); printf("%c",1); ch=getch(); switch(ch) { case 72:sxy(x,y);printf(" ");x--;break; case 80:sxy(x,y);printf(" ");x++;break; case 75:sxy(x,y);printf(" ");y--;break; case 77:sxy(x,y);printf(" ");y++;break; case 'w':sxy(a,b);printf(" ");a--;break; case 's':sxy(a,b);printf(" ");a++;break; case 'a':sxy(a,b);printf(" ");b--;break; case 'd':sxy(a,b);printf(" ");b++;break; } if(x>=32||y>=63||x<0||y<0) { SetColor(15,0); system("cls"); printf("\n\n\n\t\t玩家1撞墙了,玩家2获胜"); Sleep(1000); system("title 点点大作战"); return 0; } else if(a>=32||b>=63||a<0||b<0) { SetColor(15,0); system("cls"); printf("\n\n\n\t\t玩家2撞墙了,玩家1获胜"); Sleep(1000); system("title 点点大作战"); return 0; } st=ate(1); if(st!=-1) { yfen++; sxy(0,12); printf("%03d",yfen);//更新分数输出 if(yfen%5==0) { alv++; sxy(1,12); printf("%03d",alv); //更新等级输出 } rand_start(st); sxy(srt[st][0],srt[st][1]); printf("%c",4); } st=ate(2); if(st!=-1) { efen++; sxy(0,28); printf("%03d",efen);//更新分数输出 if(efen%5==0) { blv++; sxy(1,28); printf("%03d",blv);//更新等级输出 } rand_start(st); sxy(srt[st][0],srt[st][1]); printf("%c",4); } if(a==x&&b==y) { if(alv>blv) { system("cls"); printf("\n\n\n\t\t玩家2被吞噬!玩家1获胜!!"); Sleep(1000); system("title 点点大作战"); return 1; } else if(alv<blv) { system("cls"); printf("\n\n\n\t\t玩家1被吞噬!玩家2获胜!!"); Sleep(1000); system("title 点点大作战"); return 2; } else { sxy(a-1,b-1); printf("碰 撞"); Sleep(500); system("cls"); printf("\n\n\t\t\t同归于尽!"); Sleep(1000); system("title 点点大作战"); return 0; } } } } int alone_game() { x=3; y=1; system("cls"); system("title 单人模式~~~~"); int i,st,yfen=0,alv=1; char ch; i=0; for(i=0;i<10;i++) rand_start(i); for(i=0;i<10;i++) { sxy(srt[i][0],srt[i][1]); printf("%c",4); } sxy(0,0); printf("%c 分数:%03d 等级:%03d",2,yfen,alv); while(1) { sxy(x,y); printf("%c",2); ch=getch(); switch(ch) { case 72:sxy(x,y);printf(" ");x--;break; case 80:sxy(x,y);printf(" ");x++;break; case 75:sxy(x,y);printf(" ");y--;break; case 77:sxy(x,y);printf(" ");y++;break; } if(x>=32||y>=63||x<0||y<0) { SetColor(15,0); system("cls"); printf("\n\n\n\t\t你撞墙了,失败~~~"); Sleep(1000); system("title 点点大作战"); return 0; } st=ate(1); if(st!=-1) { yfen++; sxy(0,7); printf("%03d",yfen);//更新分数输出 if(yfen%5==0) { alv++; sxy(0,16); printf("%03d",alv); //更新等级输出 } rand_start(st); sxy(srt[st][0],srt[st][1]); printf("%c",4); } } } int main() { system("mode con cols=63 lines=32"); int choose=10; char c; star(); sxy(10,25); printf("==比==赛=="); sxy(11,25); printf("==训==练=="); sxy(12,25); printf("==娱==乐=="); sxy(13,25); printf("==退==出=="); while(1) { sxy(choose-1,23); printf(" "); sxy(choose+1,23); printf(" "); sxy(choose,23); SetColor(12,0); printf("->"); SetColor(15,0); c=getch(); if(c==72&&choose>10) choose--; else if(c==80&&choose<13) choose++; else if(c==13) { if(choose==10) { choose=11; while(1) { sxy(choose-1,23); printf(" "); sxy(choose+1,23); printf(" "); sxy(choose,23); SetColor(12,0); printf("->"); SetColor(15,0); sxy(10,25); printf("==比==赛=="); sxy(11,25); printf(" = 双人 = "); sxy(12,25); printf(" = 单人 = "); sxy(13,25); printf(" = 收起 = "); sxy(14,25); printf("==娱==乐=="); sxy(15,25); printf("==退==出=="); c=getch(); if(c==72&&choose>11) choose--; else if(c==80&&choose<13) choose++; else if(c==13) { if(choose==11) { double_game(); system("cls"); } else if(choose==12) { alone_game(); system("cls"); } else if(choose==13) { system("cls"); sxy(10,25); printf("==比==赛=="); sxy(11,25); printf("==训==练=="); sxy(12,25); printf("==娱==乐=="); sxy(13,25); printf("==退==出=="); choose=10; break; } } } } else if(choose==13) { return 0; } else { MessageBox(NULL,TEXT("该功能还未开放哦!"), TEXT("敬请期待"), MB_OK | MB_ICONINFORMATION ); } } } }
作者QQ:3244982757