那时候习惯devc++,还没有解锁visualc++
这个gotoxy函数是网上抄来自己改的,好用,强推
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <ctime>
#include <thread>
#include <conio.h>
#include <windows.h>
using namespace std;
int gamemap[105][105],len;
int move_x=1,move_y,t;
HANDLE hOut=GetStdHandle(STD_OUTPUT_HANDLE);
bool flag,Dead,jud=0;
char di;
void gotoxy(int x,int y,char k){
COORD pos ={(short)(y),(short)(x)};
SetConsoleCursorPosition(hOut,pos);
printf("%c",k);
/* pos={0,100};
SetConsoleCursorPosition(hOut,pos);*/
}
struct snake{
int nxt_x,nxt_y;
int x,y;
}s[100005];
void init(){
len=1;
s[1].x=rand()%22+1;
s[1].y=rand()%22+1;
gotoxy(s[1].x,s[1].y,'#');
gamemap[s[1].x][s[1].y]='#';
Sleep(500);
}
void dead(){
system("cls");
printf("\n");
Dead=true;
for(int i=1;i<=80;i++) printf("-");
printf("\n");
for(int i=1;i<=10;i++){
printf("|");
for(int j=1;j<=80;j++){
printf(" ");
}
printf("|\n");
}
printf("|");
for(int i=1;i<=35;i++) printf(" ");
printf("GAME OVER");
for(int i=45;i<=80;i++) printf(" ");
printf("|\n");
for(int i=1;i<=11;i++){
printf("|");
for(int j=1;j<=80;j++){
printf(" ");
}
printf("|\n");
}
for(int i=1;i<=80;i++) printf("-");
printf("\n");
}
bool itself(){
if(gamemap[s[1].x][s[1].y]=='#') return 1;
return 0;
}
void snake_move(){
if(jud==0){
gotoxy(s[len].x,s[len].y,' ');
gamemap[s[len].x][s[len].y]=' ';
}
jud=0;
if(s[1].x==0||s[1].x==23||s[1].y==0||s[1].y==81){
dead();
return ;
}
if(gamemap[s[1].x+move_x][s[1].y+move_y]=='O'){
len++;
s[len].nxt_x=s[len-1].x;
s[len].nxt_y=s[len-1].y;
jud=1;
}
if(len==1){
gotoxy(s[1].x,s[1].y,' ');
gamemap[s[1].x][s[1].y]=' ';
}
s[1].x+=move_x;
s[1].y+=move_y;
if(s[1].x==0||s[1].x==23||s[1].y==0||s[1].y==81&&itself()){
dead();
return ;
}
gotoxy(s[1].x,s[1].y,'#');
gamemap[s[1].x][s[1].y]='#';
for(int i=2;i<=len;i++){
s[i].x=s[i].nxt_x;
s[i].y=s[i].nxt_y;
s[i].nxt_x=s[i-1].x;
s[i].nxt_y=s[i-1].y;
}
Sleep(500);
}
void reaD(){
int ch;
while( (ch=getch())!=0x1B ) /* Press ESC to quit... */
{
switch(ch)
{
case 0xE0:
switch(ch=getch())
{
case 72: move_x=-1,move_y=0;break;
case 80: move_x=1,move_y=0; break;
case 75: move_x=0,move_y=-1; break;
case 77: move_x=0,move_y=1; break;
default:
break;
}
break;
default:
break;
}
if(Dead) break;
}
}
void start(){
system("cls");
printf("\n");
for(int i=1;i<=80;i++) printf("-");
printf("\n");
for(int i=1;i<=10;i++){
printf("|");
for(int j=1;j<=80;j++){
printf(" ");
}
printf("|\n");
}
printf("|");
for(int i=1;i<=35;i++) printf(" ");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED);
printf("Snake");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN);
for(int i=41;i<=80;i++) printf(" ");
printf("|\n");
printf("|");
for(int i=1;i<=30;i++) printf(" ");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_BLUE);
printf("PRESS THE R TO START");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN);
for(int i=51;i<=80;i++) printf(" ");
printf("|\n");
for(int i=1;i<=10;i++){
printf("|");
for(int j=1;j<=80;j++){
printf(" ");
}
printf("|\n");
}
for(int i=1;i<=80;i++) printf("-");
printf("\n");
if(getch());
system("cls");
COORD pos ={0,0};
SetConsoleCursorPosition(hOut,pos);
for(int i=1;i<=82;i++) printf("-");
pos={0,1};
SetConsoleCursorPosition(hOut,pos);
for(int i=1;i<=22;i++) printf("|\n");
pos={0,23};
SetConsoleCursorPosition(hOut,pos);
for(int i=1;i<=82;i++) printf("-");
for(short i=1;i<=22;i++){
pos={82,i};
SetConsoleCursorPosition(hOut,pos);
printf("|\n");
}
}
void map_reset(){
if(t==0){
int temp_x,temp_y=rand();
temp_x=rand()%22+1;
temp_y=rand()%80+1;
// printf("%d %d\n",temp_x,temp_y);
while(gamemap[temp_x][temp_y]!=' '){
temp_x=rand()%22+1;
temp_y=rand()%80+1;
}
gamemap[temp_x][temp_y]='O';
gotoxy(temp_x,temp_y,'O');
}
t++;
t%=15;
}
void f5(){
while(1){
snake_move();
if(flag) return;
map_reset();
if(Dead) break;
// printf("TesT!\n");
// Sleep(500);
// printf("tesT!\n");
}
}
int main(){
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN);
srand(time(0));
start();
init();
move_x=1;move_y=0;
thread th1(reaD);
thread th2(f5);
th1.join();
th2.join();
return 0;
}
emmm忽略左上角文件名,这学期有c语言的课,就把所有东西都丢在这个文件夹里了。