GAMES

百度搜vijos,讨论里面自己找,超多游戏!

4 条评论

  • 妙啊

  • 飞机......
    #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();
    }

  • 五子棋,除非你智商比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();
    }
    }

  • 贪吃蛇 不要碰到自己身体!
    #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