穷人版智能蛇

智能蛇,顾名思义,是可以自动行动,完成游戏目标的贪吃蛇(虽然我觉得好像没人会愿意玩这个游戏...)

下面是源码。
//蛇长度初始是5 H代表蛇的头部 X是蛇的身体
//输入行数为 n 列数为 m  
//0 1 2 3 分别代表右下左上
#include<bits/stdc++.h>
#define inf 1e9
#define rep(i,l,r) for (int i=l;i<=r;i++)
using namespace std;
int n,m,mcnt=0,x=1,y=5,pre,rx,ry,len=5;
struct node{int x,y;};
queue<node> q;
char Map[1005][1005];
void makemap(){
    puts("n=");
    scanf("%d",&n);
    system("cls");
    puts("m=");
    scanf("%d",&m);
    system("cls");
    rep(i,0,n+1) rep(j,0,m+1) Map[i][j]=' ';
    rep(i,0,m+1) Map[0][i]=Map[n+1][i]='*';
    rep(i,0,n+1) Map[i][0]=Map[i][m+1]='*';
    rep(i,1,4) Map[1][i]='X',q.push((node){1,i});
    Map[1][5]='H'; q.push((node){1,5}); 
}
void pm(){    srand(time(NULL));    int i, j;    i = rand() % w + 1;    j = rand() % h + 1;    while (map[i][j] != ' ')    {        i = rand() % w + 1;        j = rand() % h + 1;    }    map[i][j] = '$';}int getinp()//W 1 ;A 2 ;S 3 ;D 4{    int dr = 0;    char c = 0;    int tle = 1;    int start = clock();    while (clock() - start <= diffcuilty * 50)    {        if (kbhit()) c = getch();        if (c != 0) { tle--; }        if (c == 'w') dr = 1;        if (c == 'a') dr = 2;        if (c == 's') dr = 3;        if (c == 'd') dr = 4;        if (clock() - start > diffcuilty * 50) return dr;    }    if (c == 'w') dr = 1;    if (c == 'a') dr = 2;    if (c == 's') dr = 3;    if (c == 'd') dr = 4;    return dr;}void pp(){    int i, j;    system("cls");    for (i = h + 1; i >= 0; --i)    {        FOR(j, 0, w + 1)            printf("%c", map[j][i]);        printf("\n");    }}void dead(){    int t;    printf("Failture with the score:%d\n", len);    printf("\n\n\nPress any key to exit.");    getchar();    exit(0);}
void trick2(){
    if (x==1&&y==m) {solve(1); return;}
    if (x==2&&y==1) {solve(3); return;}
    if (x==1) solve(0);
    else {
        if (x==2) {
            if (!solve(1)) solve(2);    
        }
        else if (x==n){
            if (!solve(3)) solve(2);    
        }
        else if (!solve(1)) solve(3);
    }
}
int main(){
    srand(time(NULL));
    makemap();
    pre=0;
    while (1){
        init();
        int time=clock(); 
        while (clock()-time<100);
        int mn=inf,mni=-1;
        int xx=x+dx[pre],yy=y+dy[pre];
        if ((n&1)==0) {trick(); goto o;}
        if ((m&1)==0) {trick2(); goto o;}
        if (abs(xx-rx)+abs(yy-ry)<mn&&(Map[xx][yy]==' '||Map[xx][yy]=='M')) {
            mn=abs(xx-rx)+abs(yy-ry); mni=pre;  
        }
        rep(i,0,3) {
            int xx=x+dx[i],yy=y+dy[i];
            if (abs(xx-rx)+abs(yy-ry)<mn&&(Map[xx][yy]==' '||Map[xx][yy]=='M')) {
                mn=abs(xx-rx)+abs(yy-ry); mni=i;    
            }   
        }
        solve(mni); pre=mni;

        if (mni==-1) {puts("GAME OVER"); break;}
        o:;
        if (len==n*m) {puts("GAME OVER"); break;}
        system("cls");
    }   
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值