Keller的奇葩贪吃蛇游戏
时间就像一条贪吃蛇。

前一阵翻旧代码忽然翻到了这个高中时搞的贪吃蛇代码QAQ
现在看来也还挺有趣的...
原来博客的文章都丢掉了,然而这篇博文的文案写在代码的注释里所以保留了下来~
以下是原内容
这里介绍一下与普通的贪吃蛇的区别:
1.先是搞了个果子闪烁...其实就是个rand()...(逃
2.然后增加了障碍物(金币)...
3.然后设置了难度,随着难度增加,障碍物出现数量、蛇的移动速度等 都会变化
4.加上了提示音~就是蜂鸣声啦~
5.当得分大于5时,有10%的几率出现“时空隧道传送门”...蛮有趣的~
6.还有个防沉迷(滑稽)...然而正常不可能玩到...
7.然后还有一些普通贪吃蛇没有的bug... 比如果子出现在障碍物中无法吃到..新的障碍物rand()到了头前面迷之瞬间GameOver...(有时间改一下)
8.还有一些小彩蛋和迷之奖励关卡...请自行从代码中发现...
注意: win10 显示效果并不理想... 建议使用机房XP系统~ 流畅运行、蜂鸣声带感~
代码:
/*
Name: 一个奇葩的贪吃蛇游戏
Author: HelenKeller
Date: 06-09-2016 16:14
*/
#include<cstdio>
#include<conio.h>
#include<cstdlib>
#include<windows.h>
#include<cstring>
#include<pthread.h>
#include<ctime>
using namespace std;
const int N = 400, n = 20, dx[] = {-1,1,0,0}, dy[] = {0,0,-1,1};
int c,len,ed,eed,x,y,v,a[25][25],bx[N],by[N],nddd,tttim,insk,inskp;
pthread_t t1,t2;
struct nd {int x,y,dir;}p[N];
int slslsls;
void* gt(void* args) {
while(c = getch()) {
if(c == 72 && p[1].dir > 1) p[0].dir = 0;
else if(c == 80 && p[1].dir > 1) p[0].dir = 1;
else if(c == 75 && p[1].dir < 2) p[0].dir = 2;
else if(c == 77 && p[1].dir < 2) p[0].dir = 3;
else if(c == 114) eed = 1;
}
}
void mk() {
int cnt = 0;
for(int i = 2; i < n; i++)
for(int j = 2; j < n; j++)
if(!a[i][j]) bx[++cnt] = i, by[cnt] = j;
int d = rand()%cnt+1;
a[x=bx[d]][y=by[d]] = 3;
}
int now5x,now5y;
int bx2[N],by2[N];
void mk2() {
rand();rand();
int cnt = 0;
for(int i = 2; i < n; i++)
for(int j = 2; j < n; j++)
if(!a[i][j]) bx2[++cnt] = i, by2[cnt] = j;
int d = rand()%cnt+1;
now5x=(bx2[d]),now5y=(by2[d]);
a[bx2[d]][by2[d]] = 5;
}
void mk3() {
rand();rand();
int cnt = 0;
for(int i = 2; i < n; i++)
for(int j = 2; j < n; j++)
if(!a[i][j]) bx2[++cnt] = i, by2[cnt] = j;
int d = rand()%cnt+1;
now5x=(bx2[d]),now5y=(by2[d]);
a[bx2[d]][by2[d]] = 4;
}
void pr_k(){
Sleep(100);
system("cls");
printf("Score:%d 难度等级:%d \n", v,nddd);
putchar('*');
for(int i = 2; i < n; i++) putchar('-'), putchar('-');
puts("*");
for(int i = 2; i < n; i++) {
putchar('|');
for(int j = 2; j < n; j++) {
int gz=rand()%5;
if(gz==1)putchar('&');
else if(gz==2)putchar('!');
else if(gz==3)putchar('@');
else if(gz==4)putchar('%');
else
putchar('+');
putchar(' ');
}
puts("|");
}
putchar('*');
for(int i = 2; i < n; i++) putchar('-'), putchar('-');
puts("*");
}
char name[100];
void* run(void* args) {
srand(time(NULL));
memset(a, 0, sizeof a);
len = 5, p[0].dir = 0, v = 0;
if(insk){
v=inskp+100;
//insk=0;
}
for(int i = 1; i <= len; i++) p[i].x = 7+i, p[i].y = 10, p[i].dir = 0, a[p[i].x][p[i].y] = 2;
mk();
while(1) {
int vv=v;
if(insk){
vv=v%100;
}
slslsls=200-5*vv*nddd;
if(slslsls<30)slslsls=30;
if(nddd==88888888) slslsls=100;
Sleep(slslsls);
system("cls");
for(int i = len; i >= 1; i--) p[i].dir = p[i-1].dir;
for(int i = 1; i <= len; i++) {
a[p[i].x][p[i].y] = 0, p[i].x += dx[p[i].dir], p[i].y += dy[p[i].dir];
if(a[p[i].x][p[i].y] == 1 || a[p[i].x][p[i].y] == 2) if(nddd!=88888888)goto over;
if(a[p[i].x][p[i].y] == 5) goto over2;
if(a[p[i].x][p[i].y] == 3) Beep(5500,40);
if(a[p[i].x][p[i].y] == 4){
int uiui=1;
while(uiui<10){
len++;uiui++;
//a[now5x][now5y]=0;
p[len].x = p[len-1].x+dx[p[len-1].dir^1], p[len].y = p[len-1].y+dy[p[len-1].dir^1], p[len].dir = p[len-1].dir;
pr_k();
}
goto over4;
}
if(i != 1) a[p[i].x][p[i].y] = 2; else a[p[i].x][p[i].y] = 1;
}
if(p[1].x == x && p[1].y == y) {
len++, v++;
//printf("\a");
//a[now5x][now5y]=0;
p[len].x = p[len-1].x+dx[p[len-1].dir^1], p[len].y = p[len-1].y+dy[p[len-1].dir^1], p[len].dir = p[len-1].dir;
mk();
if(v>=5&&(rand()%10==8 || insk)){
mk3();
}
int mone=rand()%(v);
if(nddd>3) mone=(v+nddd)%(25);
if(nddd==88888888){
mone=0;
for(int i=1;i<=25;i++)mk();
//v+=88;
}
if(insk){
mone%=15;
}
for(int i=1;i<=mone;i++)
if((rand()%2 && nddd>1)|| (nddd>=3&&!insk))mk2();
}
//insk=0;
printf("Score:%d 难度等级:%d \n", v,nddd);
putchar('*');
for(int i = 2; i < n; i++) putchar('-'), putchar('-');
puts("*");
for(int i = 2; i < n; i++) {
putchar('|');
for(int j = 2; j < n; j++) {
if(a[i][j] == 1) {
putchar('#');
}
else if(a[i][j] == 2) {
/*int gz=rand()%5;
if(gz==1)putchar('&');
else if(gz==2)putchar('!');
else if(gz==3)putchar('@');
else if(gz==4)putchar('%');
else*/
putchar('+');
}
else if(a[i][j] == 3) {
int gz=rand()%5;
if(gz==1)putchar('&');
else if(gz==2)putchar('!');
else if(gz==3)putchar('@');
else if(gz==4)putchar('%');
else putchar('*');
}
else if(a[i][j]==5){
putchar('$');
}
else if(a[i][j]==4){
int gz=rand()%5;
if(gz==1)putchar(' ');
else if(gz==2)putchar('W');
else if(gz==3)putchar('K');
else if(gz==4)putchar('L');
else putchar('*');
}
else putchar(' ');
putchar(' ');
}
puts("|");
}
putchar('*');
for(int i = 2; i < n; i++) putchar('-'), putchar('-');
puts("*");
tttim++;
printf("您已进行了 %d 蛇时间 的游戏, %d 蛇时间后您将进入疲劳时间!\n",tttim,10000-tttim);
if(tttim>=10000){
goto over3;
}
puts(" ");
if(p[1].x <= 1 || p[1].x >= n || p[1].y <= 1 || p[1].y >= n) {
over:system("cls"), puts("Game Over!\nPress R to Try Again.");
insk=0;
//slslsls=400;
printf("Your Score:%d", v);
printf("\n\n 输入你的名字:\n");
memset(name,0,sizeof(name));
scanf("%s",name);
printf("===============排行榜===============\n");
printf("No.1 HelenKeller scord: 888888 \n");
printf("No.2 ");
for(int i=0;i<strlen(name);i++){
printf("%c",name[i]);
}
printf(" score: %d \n\n",v);
printf("=============继续加油!=============\n");
printf("Press R to Try Again.\n");
while(!eed);
ed = 1;
return 0;
}
if(1<0) {
over2:system("cls"), puts("年轻人不要贪图钱财!\nPress R to Try Again.");
//slslsls=400;
insk=0;
printf("Your Score:%d", v);
printf("\n\n 输入你的名字:\n");
memset(name,0,sizeof(name));
scanf("%s",name);
printf("===============排行榜===============\n");
printf("No.1 HelenKeller scord: 888888 \n");
printf("No.2 ");
for(int i=0;i<strlen(name);i++){
printf("%c",name[i]);
}
printf(" scord: %d \n\n",v);
printf("=============继续加油!=============\n");
printf("Press R to Try Again.\n");
while(!eed);
ed = 1;
return 0;
}
if(1<0){
over3:system("cls"), puts("您已进入疲劳时间!请下线!\n**************************");
//slslsls=400;
insk=0;
Sleep(10000);
while(!eed);
ed = 1;
return 0;
}
if(1<0) {
over4:system("cls"), Beep(550,1000);puts("\n\n你陷入了时空隧道!\n");
insk=1;
inskp=v;
//Sleep(1000);
ed = 1;
return 0;
}
}
}
int main(){
puts("An Easy Game\nMade by HelenKeller\n\nPress Enter to Start...");
while(c = getch()) if(c == 13) break;
printf("\n\n\n请输入数字选择难度:0: 白痴 1:简单 2:困难 3:地狱 大于3:极限\n");
scanf("%d",&nddd);
start:
char ch;
pthread_create(&t1, NULL, gt, NULL);
pthread_create(&t2, NULL, run, NULL);
while(!ed);
ed = eed = 0;
goto start;
return 0;
}
直接编译代码运行就可以在控制台玩辣~