- 游戏
- 2021-01-17 10:48:44 @
百度搜vijos,讨论里面自己找,超多游戏!
4 条评论
-
熊恺@石湖中学 (熊恺) LV 10 @ 2021-03-14 12:09:32
妙啊
-
2021-02-02 11:57:11@
飞机......
#include<iostream>
#include<windows.h>
#include<conio.h>
#include<time.h>
#include<string>
using namespace std;
typedef struct Frame
{
COORD position[2];
int flag;
}Frame;
void SetPos(COORD a)
{
HANDLE out=GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(out, a);
}
void SetPos(int i, int j)
{
COORD pos={i, j};
SetPos(pos);
}
void HideCursor()
{
CONSOLE_CURSOR_INFO cursor_info = {1, 0};
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
}//把第y行,[x1, x2) 之间的坐标填充为 ch
void drawRow(int y, int x1, int x2, char ch)
{
SetPos(x1,y);
for(int i = 0; i <= (x2-x1); i++) cout<<ch;
}//在a, b 纵坐标相同的前提下,把坐标 [a, b] 之间填充为 ch
void drawRow(COORD a, COORD b, char ch)
{
if(a.Y == b.Y) drawRow(a.Y, a.X, b.X, ch);
else {
SetPos(0, 25);
cout<<"error code 01:无法填充行,因为两个坐标的纵坐标(x)不相等";
system("pause");
}
}//把第x列,[y1, y2] 之间的坐标填充为 ch
void drawCol(int x, int y1, int y2, char ch)
{
int y=y1;
while(y!=y2+1) {
SetPos(x, y);
cout<<ch;
y++;
}
}//在a, b 横坐标相同的前提下,把坐标 [a, b] 之间填充为 ch
void drawCol(COORD a, COORD b, char ch)
{
if(a.X == b.X) drawCol(a.X, a.Y, b.Y, ch);
else {
SetPos(0, 25);
cout<<"error code 02:无法填充列,因为两个坐标的横坐标(y)不相等";
system("pause");
}
}//左上角坐标、右下角坐标、用row填充行、用col填充列
void drawFrame(COORD a, COORD b, char row, char col)
{
drawRow(a.Y, a.X+1, b.X-1, row);
drawRow(b.Y, a.X+1, b.X-1, row);
drawCol(a.X, a.Y+1, b.Y-1, col);
drawCol(b.X, a.Y+1, b.Y-1, col);
}void drawFrame(int x1, int y1, int x2, int y2, char row, char col)
{
COORD a={x1, y1};
COORD b={x2, y2};
drawFrame(a, b, row, col);
}void drawFrame(Frame frame, char row, char col)
{
COORD a = frame.position[0];
COORD b = frame.position[1];
drawFrame(a, b, row, col);
}void drawPlaying()
{
drawFrame(0, 0, 48, 24, '=', '|');// draw map frame;
drawFrame(49, 0, 79, 4, '-', '|');// draw output frame
drawFrame(49, 4, 79, 9, '-', '|');// draw score frame
drawFrame(49, 9, 79, 20, '-', '|');// draw operate frame
drawFrame(49, 20, 79, 24, '-', '|');// draw other message frame
SetPos(52, 6);
cout<<"得分:";
SetPos(52, 7);
cout<<"称号:";
SetPos(52,10);
cout<<"操作方式:";
SetPos(52,12);
cout<<" a,s,d,w 控制战机移动。";
SetPos(52,14);
cout<<" p 暂停游戏。";
SetPos(52,16);
cout<<" e 退出游戏。";
}//在[a, b)之间产生一个随机整数
int random(int a, int b)
{
int c=(rand() % (a-b))+ a;
return c;
}//在两个坐标包括的矩形框内随机产生一个坐标
COORD random(COORD a, COORD b)
{
int x=random(a.X, b.X);
int y=random(a.Y, b.Y);
COORD c={x, y};
return c;
}bool judgeCoordInFrame(Frame frame, COORD spot)
{
if(spot.X>=frame.position[0].X)
if(spot.X<=frame.position[1].X)
if(spot.Y>=frame.position[0].Y)
if(spot.Y<=frame.position[0].Y)
return true;
return false;
}void printCoord(COORD a)
{
cout <<"( "<<a.X<<" , "<<a.Y<<" )";
}void printFrameCoord(Frame a)
{
printCoord(a.position[0]);
cout <<" - ";
printCoord(a.position[1]);
}int drawMenu()
{
SetPos(30, 1);
cout<<"P l a n e W a r";
drawRow(3, 0, 79, '-');
drawRow(5, 0, 79, '-');
SetPos(28, 4);
cout<<"w 和 s 选择, k 确定";
SetPos(15, 11);
cout<<"1. 简单的敌人";
SetPos(15, 13);
cout<<"2. 冷酷的敌人";
drawRow(20, 0, 79, '-');
drawRow(22, 0, 79, '-');
SetPos(47, 11);
cout<<"简单的敌人:";
SetPos(51, 13);
cout<<"简单敌人有着较慢的移动速度。";
int j=11;
cout<<">>";
while(1) {
if( _kbhit() ) {
char x=_getch();
switch (x) {
case 'w' : {
if( j == 13) {
SetPos(12, j);
cout<<" ";
j = 11;
SetPos(12, j);
cout<<">>";
SetPos(51, 13);
cout<<" ";
SetPos(47, 11);
cout<<"简单的敌人:";
SetPos(51, 13);
cout<<"简单敌人有着较慢的移动速度。";
}
break;
}
case 's' : {
if( j == 11 ) {
SetPos(12, j);
cout<<" ";
j = 13;
SetPos(12, j);
cout<<">>";
SetPos(51, 13);
cout<<" ";
SetPos(47, 11);
cout<<"冷酷的敌人:";
SetPos(51, 13);
cout<<"冷酷的敌人移动速度较快。";
}
break;
}
case 'k' : {
if (j == 8) return 1; else return 2;
}
}
}
}
}
/*================== the Game Class ==================*/class Game
{
public:
COORD position[10];
COORD bullet[10];
Frame enemy[8];
int score;
int rank;
int rankf;
string title;
int flag_rank;Game ();
//初始化所有
void initPlane();
void initBullet();
void initEnemy();//初始化其中一个
//void initThisBullet( COORD );
//void initThisEnemy( Frame );void planeMove(char);
void bulletMove();
void enemyMove();//填充所有
void drawPlane();
void drawPlaneToNull();
void drawBullet();
void drawBulletToNull();
void drawEnemy();
void drawEnemyToNull();//填充其中一个
void drawThisBulletToNull( COORD );
void drawThisEnemyToNull( Frame );void Pause();
void Playing();
void judgePlane();
void judgeEnemy();void Shoot();
void GameOver();
void printScore();
};Game::Game()
{
initPlane();
initBullet();
initEnemy();
score = 0;
rank = 25;
rankf = 0;
flag_rank = 0;
}void Game::initPlane()
{
COORD centren={39, 22};
position[0].X=position[5].X=position[7].X=position[9].X=centren.X;
position[1].X=centren.X-2;
position[2].X=position[6].X=centren.X-1;
position[3].X=position[8].X=centren.X+1;
position[4].X=centren.X+2;
for(int i=0; i<=4; i++)
position[i].Y=centren.Y;
for(int i=6; i<=8; i++)
position[i].Y=centren.Y+1;
position[5].Y=centren.Y-1;
position[9].Y=centren.Y-2;
}void Game::drawPlane()
{
for(int i=0; i<9; i++)
{
SetPos(position[i]);
if(i!=5)
cout<<"O";
else if(i==5)
cout<<"|";
}
}void Game::drawPlaneToNull()
{
for(int i=0; i<9; i++)
{
SetPos(position[i]);
cout<<" ";
}
}void Game::initBullet()
{
for(int i=0; i<10; i++)
bullet[i].Y = 30;
}void Game::drawBullet()
{
for(int i=0; i<10; i++)
{
if( bullet[i].Y != 30)
{
SetPos(bullet[i]);
cout<<"^";
}
}
}void Game::drawBulletToNull()
{
for(int i=0; i<10; i++)
if( bullet[i].Y != 30 )
{
COORD pos={bullet[i].X, bullet[i].Y+1};
SetPos(pos);
cout<<" ";
}
}void Game::initEnemy()
{
COORD a={1, 1};
COORD b={45, 15};
for(int i=0; i<8; i++)
{
enemy[i].position[0] = random(a, b);
enemy[i].position[1].X = enemy[i].position[0].X + 3;
enemy[i].position[1].Y = enemy[i].position[0].Y + 2;
}
}void Game::drawEnemy()
{
for(int i=0; i<8; i++)
drawFrame(enemy[i].position[0], enemy[i].position[1], '-', '|');
}void Game::drawEnemyToNull()
{
for(int i=0; i<8; i++)
{
drawFrame(enemy[i].position[0], enemy[i].position[1], ' ', ' ');
}
}void Game::Pause()
{
SetPos(61,2);
cout<<" ";
SetPos(61,2);
cout<<"暂停中...";
char c=_getch();
while(c!='p')
c=_getch();
SetPos(61,2);
cout<<" ";
}void Game::planeMove(char x)
{
if(x == 'a')
if(position[1].X != 1)
for(int i=0; i<=9; i++)
position[i].X -= 2;if(x == 's')
if(position[7].Y != 23)
for(int i=0; i<=9; i++)
position[i].Y += 1;if(x == 'd')
if(position[4].X != 47)
for(int i=0; i<=9; i++)
position[i].X += 2;if(x == 'w')
if(position[5].Y != 3)
for(int i=0; i<=9; i++)
position[i].Y -= 1;
}void Game::bulletMove()
{
for(int i=0; i<10; i++)
{
if( bullet[i].Y != 30)
{
bullet[i].Y -= 1;
if( bullet[i].Y == 1 )
{
COORD pos={bullet[i].X, bullet[i].Y+1};
drawThisBulletToNull( pos );
bullet[i].Y=30;
}}
}
}void Game::enemyMove()
{
for(int i=0; i<8; i++)
{
for(int j=0; j<2; j++)
enemy[i].position[j].Y++;if(24 == enemy[i].position[1].Y)
{
COORD a={1, 1};
COORD b={45, 3};
enemy[i].position[0] = random(a, b);
enemy[i].position[1].X = enemy[i].position[0].X + 3;
enemy[i].position[1].Y = enemy[i].position[0].Y + 2;
}
}
}void Game::judgePlane()
{
for(int i = 0; i < 8; i++)
for(int j=0; j<9; j++)
if(judgeCoordInFrame(enemy[i], position[j]))
{
SetPos(62, 1);
cout<<"坠毁";
drawFrame(enemy[i], '+', '+');
Sleep(1000);
GameOver();
break;
}
}void Game::drawThisBulletToNull( COORD c)
{
SetPos(c);
cout<<" ";
}void Game::drawThisEnemyToNull( Frame f )
{
drawFrame(f, ' ', ' ');
}void Game::judgeEnemy()
{
for(int i = 0; i < 8; i++)
for(int j = 0; j < 10; j++)
if( judgeCoordInFrame(enemy[i], bullet[j]) )
{
score += 5;
drawThisEnemyToNull( enemy[i] );
COORD a={1, 1};
COORD b={45, 3};
enemy[i].position[0] = random(a, b);
enemy[i].position[1].X = enemy[i].position[0].X + 3;
enemy[i].position[1].Y = enemy[i].position[0].Y + 2;
drawThisBulletToNull( bullet[j] );
bullet[j].Y = 30;
}
}void Game::Shoot()
{
for(int i=0; i<10; i++)
if(bullet[i].Y == 30)
{
bullet[i].X = position[5].X;
bullet[i].Y = position[5].Y-1;
break;
}
}void Game::printScore()
{
if(score == 120 && flag_rank == 0)
{
rank -= 3;
flag_rank = 1;
}else if( score == 360 && flag_rank == 1)
{
rank -= 5;
flag_rank = 2;
}
else if( score == 480 && flag_rank == 2)
{
rank -= 5;
flag_rank = 3;
}
int x=rank/5;
SetPos(60, 6);
cout<<score;if( rank!=rankf )
{
SetPos(60, 7);
if( x == 5)
title="初级飞行员";
else if( x == 4)
title="中级飞行员";
else if( x == 3)
title="高级飞行员";
else if( x == 2 )
title="王牌飞行员";
cout<<title;
}
rankf = rank;
}void Game::Playing()
{
//HANDLE MFUN;
//MFUN= CreateThread(NULL, 0, MusicFun, NULL, 0, NULL);drawEnemy();
drawPlane();int flag_bullet = 0;
int flag_enemy = 0;while(1)
{
Sleep(8);
if(_kbhit())
{
char x = _getch();
if ('a' == x || 's' == x || 'd' == x || 'w' == x)
{
drawPlaneToNull();
planeMove(x);
drawPlane();
judgePlane();
}
else if ('p' == x)
Pause();
else if( 'k' == x)
Shoot();
else if( 'e' == x)
{
//CloseHandle(MFUN);
GameOver();
break;
}}
/* 处理子弹 */
if( 0 == flag_bullet )
{
bulletMove();
drawBulletToNull();
drawBullet();
judgeEnemy();
}
flag_bullet++;
if( 5 == flag_bullet )
flag_bullet = 0;/* 处理敌人 */
if( 0 == flag_enemy )
{
drawEnemyToNull();
enemyMove();
drawEnemy();
judgePlane();
}
flag_enemy++;
if( flag_enemy >= rank )
flag_enemy = 0;/* 输出得分 */
printScore();
}
}void Game::GameOver()
{
system("cls");
COORD p1={28,9};
COORD p2={53,15};
drawFrame(p1, p2, '=', '|');
SetPos(36,12);
string str="Game Over!";
for(int i=0; i<str.size(); i++)
{
Sleep(80);
cout<<str[i];
}
Sleep(1000);
system("cls");
drawFrame(p1, p2, '=', '|');
SetPos(31, 11);
cout<<"击落敌机:"<<score/5<<" 架";
SetPos(31, 12);
cout<<"得 分:"<<score;
SetPos(31, 13);
cout<<"获得称号:"<<title;
SetPos(30, 16);
Sleep(1000);
cout<<"继续? 是(y)| 否(n)";
as:
char x=_getch();
if (x == 'n')
exit(0);
else if (x == 'y')
{
system("cls");
Game game;
int a = drawMenu();
if(a == 2)
game.rank = 20;
system("cls");
drawPlaying();
game.Playing();
}
else goto as;
}/*================== the main function ==================*/
int main()
{
//游戏准备
srand((int)time(0)); //随机种子
HideCursor(); //隐藏光标Game game;
int a = drawMenu();
if(a == 2)
game.rank = 20;
system("cls");
drawPlaying();
game.Playing();
} -
2021-02-01 09:35:13@
五子棋,除非你智商比ta高,否则别妄想赢ta
#include <cstdio>
#include <windows.h>
#include <cstdlib>
#include <conio.h>
#include <iostream>
#include <cstring>
using namespace std;
#define Forij(x) for(int i=1;i<=x;i++)for(int j=1;j<=x;j++)
#define N 25
int fx[4][2]={{1,1},{1,0},{0,1},{1,-1}};
int Q,GG;
string C[20]={"●","○","﹢","═","║","╔","╚","╗","╝","·"};//╋
void color(int a){//颜色函数
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),a);
}
void gotoxy(int x,int y){
COORD pos;
pos.X=2*x;
pos.Y=y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);
}struct Gomoku{
int m[50][50],nx,ny;
void reset(){
system("cls");
memset(m,-1,sizeof(m));
color(7);
for (int i=1; i<=N; i++){
gotoxy(0,i);cout<<C[4]; gotoxy(N+1,i);cout<<C[4];
gotoxy(i,0);cout<<C[3]; gotoxy(i,N+1);cout<<C[3];
}
gotoxy(0,0);cout<<C[5]; gotoxy(0,N+1);cout<<C[6];
gotoxy(N+1,0);cout<<C[7]; gotoxy(N+1,N+1);cout<<C[8];
color(3);
Forij(N){
gotoxy(i,j); cout<<C[2];
}
nx=ny=N/2+1; gotoxy(nx,ny);
}void _drop(int x,int i,int j){
m[i][j]=x;
gotoxy(i,j);
color(15); cout<<C[x];
}int check(){
Forij(N){
for (int Fx=0,tmp,lst,xx,yy; Fx<4; Fx++) if(m[i][j]!=-1){
xx=i,yy=j,tmp=0,lst=m[i][j];
for (int k=1; k<=5; k++){
if (xx>N || yy>N) break;
if (m[xx][yy]==(lst^1)){break;}
if (m[xx][yy]==lst) tmp++;
xx+=fx[Fx][0],yy+=fx[Fx][1];
}
if (tmp==5){
return lst;
}
}
}
return -1;
}
int arnd(int x,int y){
int cnt=0;
for (int i=x-1; i<=x+1; i++) if (i>0 && i<=N)
for (int j=y-1; j<=y+1; j++) if (j>0 && j<=N)
if (m[i][j]>-1) cnt++;
}
void get_val(int x,int y,int &val){
val=0;
Forij(N){
for (int Fx=0,tmp,tk,xx,yy; Fx<4; Fx++){
xx=i,yy=j,tmp=tk=0;
for (int k=1; k<=5; k++){
if (xx>N || yy>N){tmp=0; break;}
if (m[xx][yy]==(x^1)){tmp=0; break;}
if (m[xx][yy]==x) tmp++,tk+=(1<<(k-1));
xx+=fx[Fx][0],yy+=fx[Fx][1];
}
switch(tmp){
case 5:
val+=800000000; break;
case 4:
val+=1000+350*y; break;
case 3:
val+=(tk==14)?(300+600*y):(300+200*y); break;
case 2:
val+=3+2*y; break;
case 1:
val+=1+y; break;
}
}
}
}void AI(int x){
int best,brnd,bi,bj,v1,v2,kkk;
best=-2147483647;
brnd=-2147483647;
Forij(N) if (m[i][j]==-1){
m[i][j]=x;
get_val(x,10,v1); //gotoxy(N+5,N/2);printf("%d ",v1);
get_val(x^1,80,v2); //gotoxy(N+5,N/2+1);printf("%d ",v2);
if (v1-v2>best) bi=i,bj=j,best=v1-v2;
if (v1-v2==best)
if ((kkk=arnd(i,j))>brnd)
brnd=kkk,bi=i,bj=j;
m[i][j]=-1;
}
_drop(x,bi,bj);
}void HM(int x){
char ch=getch();
for (;;ch=getch()){
if (ch=='w') {if (ny>1) ny--;}
else if (ch=='s') {if (ny<N) ny++;}
else if (ch=='a') {if (nx>1) nx--;}
else if (ch=='d') {if (nx<N)nx++;}
else if (m[nx][ny]==-1){_drop(x,nx,ny); return;}
gotoxy(nx,ny);
}
}
} A;int main(){
for (;;){
A.reset();
for (GG=-1;;){
gotoxy(A.nx,A.ny);
A.HM(0); GG=A.check(); if (GG>-1) break;
A.AI(1); GG=A.check(); if (GG>-1) break;
}
gotoxy(5,N+3);
if (GG==0) printf("AI_1 win!");
if (GG==1) printf("AI_2 wins!");
while (kbhit()) getch();
Sleep(500);
gotoxy(5,N+3);
printf("Press anything to continue.");
getch();
}
} -
2021-02-01 09:32:21@
贪吃蛇 不要碰到自己身体!
#include<stdio.h>
#include<conio.h>
#include<pthread.h>
#include<stdlib.h>
#include<windows.h>
#include<time.h>
#include<math.h>
int f[111][111];
int i,d[10],a,n=15,m=15,j,ett=0,headx[10],t1,d8=1,dev_c,heady[10],k=7,rm[10],d2[10],k1,l,t=250,i3;
int fdx[1111],fdy[1111],v=10,hd[10],tl[10],djx,djy,typ,dj[111],x4[10][10000],y4[10][10000],i1,vt;
pthread_t tid,sna,tim;
double sc,hsc;
FILE* f3;
char ch;
/******************************
0 up ;1 down ;2 left; 3 right
i是循环变量 t是sleep时间,n是
*长,m是宽,k1是方向临时变量 *
*f是地图,fdx和fdy是食物位置 *
*hd头,tl尾 ,x4和y4 是队列, *
i1是循环变量,sc是分数,tid是
*线程 f3是文件指针,ch是y/n。 *
******************************/
void co1()
{
COORD c;
c.X=0;
c.Y=0;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),c);
}
void co(int color1)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),color1);
}
void* f1(void* args)//另一个线程,负责拐弯
{
for(;;)
{
if(ett==1)//线程结束哨兵
return 0;
a=getch();
if(a==224)
{
a=getch(); //上下左右方向键
if(a==72&&d2[7]!=1)//防止掉头
d[7]=0;
if(a==80&&d2[7]!=0)
d[7]=1;
if(a==75&&d2[7]!=3)
d[7]=2;
if(a==77&&d2[7]!=2)
d[7]=3;
}
else
{
if(a==119&&d2[6]!=1) //WASD
d[6]=0;
if(a==115&&d2[6]!=0)
d[6]=1;
if(a==97&&d2[6]!=3)
d[6]=2;
if(a==100&&d2[6]!=2)
d[6]=3;
}
}
}
void* f2(void* args)
{
for(;;)
{
Sleep(1000);
d8++;
}
}
void print()
{
printf("score=%.2lf\n",sc);
printf(" ");
for(i=0;i<m*2;i++)
printf("-");//边框
printf("\n");
for(i=1;i<=n;i++)
{
printf("|");
for(j=1;j<=m;j++)
{
if(f[j][i]==0)
printf(" ");//空间
else if(f[j][i]==8)
printf("◆");//食物
else if(f[j][i]>=257)
printf("□");
else
{
co(f[j][i]+8);
for(i1=1;i1<=7;i1++)
{
if(j==x4[i1][hd[i1]]&&i==y4[i1][hd[i1]])
{
co(f[j][i]+4);
}
}
printf("█");//蛇身
co(7);
}
}
printf("|");
printf("\n");
}
printf(" ");
for(i=0;i<m*2;i++)
printf("-");
printf("\n");
printf("\nscore=%.2lf\n\nhighest score is%.2lf\n",sc,hsc);
}
int check(int b1)
{
int er=1;
for(i=1;i<=v;i++)
{
if(x4[b1][hd[b1]]==fdx[i]&&y4[b1][hd[b1]]==fdy[i])
{
sc+=sqrt((hd[b1]-tl[b1])*1.0/v/sqrt(m*n*d8))*40;
i3=0;
do
{
i3++;
fdx[i]=rand()%m+1;//随机生成食物
fdy[i]=rand()%n+1;
}while(f[fdx[i]][fdy[i]]!=0&&i3<10000);
f[fdx[i]][fdy[i]]=8;
if(i3>9998)
{
er=2;
goto re;
}
if(rand()%3==0&&djx==0&&djy==0)
{
do
{
djx=rand()%m+1;
djy=rand()%n+1; //生成道具
}while(f[djx][djy]!=0);
typ=1;
f[djx][djy]=typ+256;
}
er=0;
}
}
if(x4[b1][hd[b1]]==djx&&y4[b1][hd[b1]]==djy)
{
f[djx][djy]=b1;
djx=0;
djy=0;
if(rand()%7==0)
sc*=1.5;
else if(rand()%6==1)
sc/=1.5;
else if(rand()%5==2)
{
t*=1.5;
sc*=0.9;
}
else if(rand()%4==3)
{
t/=1.5;
sc*=1.1;
}
else
{
rm[b1]=rand()%3+2;
sc=sc+rand()%10-4;
}
}
re:return er;
}
void do1(int b1)
{
int d1=d[b1];
hd[b1]++;
x4[b1][hd[b1]]=x4[b1][hd[b1]-1];
y4[b1][hd[b1]]=y4[b1][hd[b1]-1];
if(d1==0)
{
y4[b1][hd[b1]]--;
}
if(d1==1)
{
y4[b1][hd[b1]]++;
}
if(d1==2)
{
x4[b1][hd[b1]]--;//移动
}
if(d1==3)
{
x4[b1][hd[b1]]++;
}
if(x4[b1][hd[b1]]<1)
x4[b1][hd[b1]]=m;
else if(y4[b1][hd[b1]]<1)
y4[b1][hd[b1]]=n;
else if(x4[b1][hd[b1]]>m)//穿墙
x4[b1][hd[b1]]=1;
else if(y4[b1][hd[b1]]>n)
y4[b1][hd[b1]]=1;
if(!vt)
i3=check(b1);
if(i3==2)
{
vt=1;//停止检测
sc+=(rand()%10)/10.0;
}
else if(i3==1)//检测是否吃到东西
{
f[x4[b1][tl[b1]]][y4[b1][tl[b1]]]=0;//尾动
tl[b1]++;
}
for(i=tl[b1];i<hd[b1]-1;i++)
if((x4[b1][hd[b1]]==x4[b1][i]&&y4[b1][hd[b1]]==y4[b1][i]))
{
f3=fopen("snake.ini","w");
hsc=hsc>sc?hsc:sc;
fprintf(f3,"%lf\n",hsc);
fprintf(f3,"%d %d %d %d %d\n",n,m,v,t1,k1);
fclose(f3);
f3=fopen("snake.log","a");
fprintf(f3,"%lf\n",sc);
fprintf(f3,"%d %d %d %d %d\n\n",n,m,v,t1,k1);
fclose(f3);
if(MessageBoxA(NULL,TEXT("想在玩一局吗"),TEXT("snake"),MB_YESNO|MB_SYSTEMMODAL)==IDYES)//弹出在玩一局
{
ett=1;//结束线程
Sleep(1);
system("snake");//不要脸的重新开始
}
exit(0);
}
f[x4[b1][hd[b1]]][y4[b1][hd[b1]]]=b1;//头动
return;
}
void init()
{
system("mode con cols=180 lines=180");
system("title SnakeBata0.6.3");
printf("自定义(Y)/默认(N)/上一次(L)?Y/N/L\n");
scanf("%c",&ch);
f3=fopen("snake.ini","a");
fclose(f3);
f3=fopen("snake.ini","r");
fscanf(f3,"%lf",&hsc);
if(ch=='L'||ch=='l')
fscanf(f3,"%d %d %d %d %d",&n,&m,&v,&t,&k1);
fclose(f3);
if(ch=='y'||ch=='Y')
{
printf("输入行数 列数 食物数 速度 蛇数\n");
scanf("%d %d %d %d %d",&n,&m,&v,&t,&k1);
k=8-k1;
if(k<0)
k=1;
}
f3=fopen("snake.ini","w");
fprintf(f3,"%lf\n",hsc);
fprintf(f3,"%d %d %d %d %d",n,m,v,t,k1);
fclose(f3);
t1=t;
srand(time(NULL));
pthread_create (&tid,NULL,f1,NULL);
pthread_create (&tim,NULL,f2,NULL);
for(i=7;i>=k;i--)
{
hd[i]=1;
tl[i]=1;
x4[i][1]=rand()%m+1;//随机生成蛇的初始位置
y4[i][1]=rand()%n+1;
f[x4[i][1]][y4[i][1]]=i;
}
for(i=1;i<=v;i++)
{
do
{
fdx[i]=rand()%m+1;//随机生成食物
fdy[i]=rand()%n+1;
}while(f[fdx[i]][fdy[i]]!=0);
f[fdx[i]][fdy[i]]=8;
}
}
int main()
{
init();
system("cls");
for(;;)//主循环
{
d2[6]=d[6];
d2[7]=d[7];
Sleep(t);
for(i1=7;i1>=k;i1--)
{
if(rm[i1]==0)
do1(i1);
else
{
if(hd[i1]-tl[i1]>5)
{
f[x4[i1][tl[i1]]][y4[i1][tl[i1]]]=0;
tl[i1]++;
rm[i1]--;
}
else
{
rm[i1]=0;
do1(i1);
}
}
for(i=tl[i1];i<=hd[i1];i++)
f[x4[i1][tl[i1]]][y4[i1][tl[i1]]]=i1;
}
if(t>t1)
t--;
else if(t<t1)
t++;
co1();
//system("cls");
print();
}
}
- 1