简单图形模拟吃豆游戏

这个程序主要是想了下怎么样让游戏中的敌人自己行走,但是又不会固定在两点来回徘徊,我用的方法是随机方向,而且走的一步不可以和前一部的方向相反,希望高手们多多指点.也希望高手们可以指教下编写简单游戏的一些技术.

#include "graphics.h"
    #include "stdlib.h"
    #include "dos.h"
    #include "bios.h"
    #define LEFT 0x4b00
    #define RIGHT 0x4d00
    #define DOWN 0x5000
    #define UP 0x4800
    #define ESC 0x011b
    #define ENTER 0x1c0d
    /*2墙壁,1可以移动地方,3自己,4敌人*/
    int a[15][20]={2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
                   2,1,1,0,0,0,1,0,1,0,0,0,1,1,1,1,1,1,0,2,
                   2,1,2,2,2,1,1,2,1,1,0,0,0,1,1,4,1,1,0,2,
                   2,1,1,0,2,1,1,2,0,1,1,2,2,2,2,2,0,0,0,2,
                   2,4,1,0,2,1,1,2,1,1,1,0,1,1,1,1,0,1,1,2,
                   2,1,2,1,2,1,1,2,1,3,2,2,1,1,1,1,2,2,1,2,
                   2,1,2,1,2,1,1,1,1,1,1,1,1,0,0,0,1,1,1,2,
                   2,1,2,1,0,1,1,1,1,2,1,0,1,2,2,2,1,1,1,2,
                   2,1,0,1,0,1,2,1,1,2,1,0,1,2,1,1,4,1,1,2,
                   2,1,0,2,0,1,2,1,1,2,1,0,1,2,1,1,1,1,1,2,
                   2,1,0,2,1,1,2,1,1,2,1,0,2,2,1,0,0,0,1,2,
                   2,1,1,2,1,1,2,1,1,2,1,0,2,1,1,2,2,1,1,2,
                   2,1,2,2,1,2,2,1,1,1,1,0,1,4,1,2,0,0,1,2,
                   2,1,0,0,0,0,0,4,0,1,1,0,1,1,1,1,0,0,1,2,
            2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2};/*数组就是地图*/
    strUCt play /*游戏中人物的结构体*/
    {
     int x;
     int y;
    };
    struct play you,them[5];
    int sum=0;/*统计吃的豆子个数,吃满50颗就算胜利*/
    int xx[5][2];/*判断敌人方向用的结构体*/
    int false=0;
    void TimeDelay(unsigned long microsec) /*延时函数 传入微秒数*/
    {
     union REGS r;
     r.h.ah=0x86;
     r.x.cx=microsec>>16;
     r.x.dx=microsec;
     int86(0x15,&r,&r);
    }
    drawblackdou(int x,int y)/*吃豆子的函数*/

    begain()/*开始函数*/
    {int i,j;
     sleep(1);
     for(i=0;i<15;i++)
      for(j=0;j<20;j++)
       if(a[i][j]==2)/*代表墙壁*/
        {
         setfillstyle(SOLID_FILL,BLUE);
         bar(100+j*20-10,100+i*20+10,100+j*20+10,100+i*20-10);
        }
       else if(a[i][j]==3)/*代表自己*/
        {
         setcolor(RED);
         circle(100+j*20,100+i*20,9);
        }
       else if(a[i][j]==4)/*代表敌人*/
        {
         setcolor(GREEN);
         circle(100+j*20,100+i*20,9);
        }
       else if(a[i][j]==0)/*代表豆子*/
       {
        setcolor(YELLOW);
        circle(100+j*20,100+i*20,3);
       }
     you.x=5;you.y=9;/*敌人也自己的开始坐标*/
     them[0].x=2;them[0].y=15;
     them[1].x=4;them[1].y=1;
     them[2].x=8;them[2].y=16;
     them[3].x=12;them[3].y=13;
     them[4].x=13;them[4].y=7;
    }
    void movethem(struct play *them)/*敌人移动的过程*/
    {int i,loop;
     randomize();
     for(i=0;i<5;i++)
     {
     if(you.x==them[i].x&&(them[i].y+1)==you.y)
       them[i].y++;
     else if(you.x==them[i].x&&(them[i].y-1)==you.y)
       them[i].y--;
     else if(you.y==them[i].y&&(them[i].x+1)==you.x)
      them[i].x++;
     else if(you.y==them[i].y&&(them[i].x-1)==you.x)/*只要控制者在身边就立即靠上去*/
      them[i].x--;
     else
     {
     loop:
       xx[i][0]=rand()%4+1;/*这里的方向采取随机赋值,原则是新的方向不可以和原来的方向相反*/
       if(xx[i][0]==1&&xx[i][1]==2xx[i][0]==2&&xx[i][1]==1)
        goto loop;
       if(xx[i][0]==3&&xx[i][1]==4xx[i][0]==4&&xx[i][1]==3)
        goto loop;
       xx[i][1]=xx[i][0];
      if(xx[i][0]==1)/*四个方向*/
       {them[i].x--;
        if(a[them[i].x][them[i].y]==2)/*如果碰墙壁的话就回到原来的地方等待随机的方向*/
        {them[i].x++;goto loop;}
       }
      else if(xx[i][0]==2)
       {them[i].x++;
        if(a[them[i].x][them[i].y]==2)
        {them[i].x--;goto loop;}
       }
      else if(xx[i][0]==3)
       {them[i].y++;
        if(a[them[i].x][them[i].y]==2)
        {them[i].y--;goto loop;}
       }
      else if(xx[i][0]==4)
       {them[i].y--;
        if(a[them[i].x][them[i].y]==2)
        {them[i].y++;goto loop;}
       }
      }
     }
    }
    fun(struct play *them)/*移动中的判断*/
    {
     int i;
     setcolor(0);/*把敌人的老位置删除*/
       for(i=0;i<5;i++)
        circle(them[i].y*20+100,them[i].x*20+100,9);
      movethem(them);/*根据控制者的位置来决定敌人的移动方向*/
    }
    win()/*胜利的话*/
    {
     cleardevice();
     settextstyle(0,0,4);
     while(!kbhit())
     {
      setcolor(rand()%13+1);
       outtextxy(200,200,"YOU WIN!");
      delay(1000);
     }
    }
    false1()/*失败画面*/
    {
     cleardevice();
     settextstyle(0,0,4);
     while(!kbhit())
     {
      setcolor(rand()%13+1);
       outtextxy(180,200,"GAME OVER!");
      delay(1000);
     }
    }
    loseyes()/*判断是否失败*/
    {int i;
     for(i=0;i<5;i++)
       if(them[i].x==you.x&&them[i].y==you.y)
       false=1;/*如果失败的话*/
    }
 main()
    {int gd=DETECT,gm;
     int key,i;
     initgraph(&gd,&gm,"c:\tc");
      cleardevice();
     begain();/*开始画面*/
     while(1)
     {
      while(!kbhit())
       {
      setcolor(GREEN);/*重画敌人*/
      for(i=0;i<5;i++)
       circle(them[i].y*20+100,them[i].x*20+100,9);
      TimeDelay(280000);
       fun(them);/*处理敌人*/
      for(i=0;i<5;i++)
       if(them[i].x==you.x&&them[i].y==you.y)
       false=1;/*如果失败的话*/
      loseyes();/*判断是否失败*/
      if(false)
        break;
       }
      if(false)
        break;
      key=bioskey(0);
      setcolor(0);/*把自己原来位置的人给删除掉*/
      circle(100+you.y*20,100+you.x*20,9);
       if(key==ESC)
        break;
       else if(key==UP)/*这里开始的判断主要是是否吃到豆子和碰到墙壁*/
        {you.x--;
         if(a[you.x][you.y]==2) you.x++;
         else if(a[you.x][you.y]==0)
         drawblackdou(you.x,you.y);}
       else if(key==DOWN)
        {you.x++;if(a[you.x][you.y]==2) you.x--;
         else if(a[you.x][you.y]==0)
         drawblackdou(you.x,you.y);}
       else if(key==RIGHT)
        {you.y++;if(a[you.x][you.y]==2) you.y--;
         else if(a[you.x][you.y]==0)

         drawblackdou(you.x,you.y);}
       else if(key==LEFT)
        {you.y--;if(a[you.x][you.y]==2) you.y++;
         else if(a[you.x][you.y]==0)
         drawblackdou(you.x,you.y);}
         if(sum==50)
          break;
      setcolor(RED);/*执行了一次键盘后再画出自己的位置*/
      circle(100+you.y*20,100+you.x*20,9);
      loseyes();/*自己走上去碰到敌人的可能*/
       if(false)
        break;
     }
     if(sum==50)/*吃满豆子了*/

     if(false)

     closegraph();
    }

时间: 2024-09-18 22:57:41

简单图形模拟吃豆游戏的相关文章

Java版吃豆游戏及源码

这是一个吃豆游戏的Java实现,具体代码较多请下载文件. 下载地址:http://download.csdn.net/source/396925 package org.loon.test;import java.awt.Color;import java.awt.Event;import java.awt.Frame;import java.awt.Graphics;import java.awt.Image;import java.awt.Insets;import java.awt.Med

Java版吃豆游戏

这是一个吃豆游戏的Java实现,具体代码较多请下载文件. 下载地址:http://download.111cn.net/source/396925 package org.loon.test; import java.awt.Color;import java.awt.Event;import java.awt.Frame;import java.awt.Graphics;import java.awt.Image;import java.awt.Insets;import java.awt.M

未完成的JS作品之一:用面向对象思想写的虫吃豆游戏

无聊时写的,稍作修改就可以支持多人游戏的,实在是懒得写下去了i键:上,j键:左,k键:下,l键:右<html><style>td {width:2pt;height:2pt;font-size:2pt;}</style><script>function Pos(x,y) {    this.x = x;    this.y = y;    return this;}function Snake(x,y) {    this.node = new Array(

《吃豆人》诞生30周年谷歌LOGO变游戏

多玩网讯(编译/落轩飞雨)30年前的5月21日,世界上不仅诞生了<星球大战:帝国反击战>,同时也诞生了一款超经典小游戏<吃豆人>,这款由Namco开发的街机游戏在80年代颇为流行,堪称街机史上的一代经典.谷歌为庆祝这款游戏诞生30周年,21日在其首页更换了LOGO,这款LOGO不仅有声音,而且还有真实的游戏内容. 基于Google字母Logo的这款吃豆人游戏完全根据原作来创作的,不仅在声音部分原音重现,甚至在第二关结束后还能看到经典的过场动画.在操作感上 Google也尽量模拟吃豆

科技宅男的胜利:吃豆人游戏鬼的行动模式研究

加拿大程序员Chad Birch在<Understanding Pac-Man Ghost Behavior>这篇论文中详细论述了吃豆人游戏里鬼们的行动模式,这里简单介绍: 总体来说,鬼的人工智能设计很简单,到了一个格子才考虑下一步往哪格走,一次只想一步.另外程序规定不能往回走,即不能立刻回到上一个格子--只有在鬼改变模式的时候,鬼会改变方向立刻往回走,以此提醒player鬼改变模式了.另外,在"害怕"模式下(吃了大豆子以后鬼变成蓝色),鬼不会改变方向,因为变成蓝色本身就足

Google Maps怎么在线玩吃豆人(Pac-Man)游戏

  访问google maps网站 1:点击屏幕左下方的吃豆人图标就能以城市街道为背景享受这款经典的游戏.谷歌能够对当前道路进行分析,并根据道路来设定级别,如果当前所在的位置并不适合来玩游戏. 2:这里先不要点击"1"(吃豆人游戏).先切换至maps.google.cn. 3:定位到你现在的位置."1"是选择玩吃豆人游戏的背景.再点击"2",进行游戏开始 4:注意右边按键的介绍.总共是八个方向:上.下.左.右.上左,上右,下左,下右 手机版:通过

C语言吃金豆游戏的源代码

问题描述 C语言吃金豆游戏的源代码 我那个吃金豆游戏总是运行不了,请问大神有木有吃金豆的c语言程序源代码 解决方案 吃金豆游戏的源代码捡金豆游戏源代码 解决方案二: 你要什么平台的这个源码 解决方案三: 天知道你说的是什么代码,怎么运行不了,运行不了是程序的问题还是你的问题.

吃豆人发明者岩谷彻设计手稿在荷兰游戏展曝光

吃豆人Pac-Man 的发明者岩谷彻至今仍旧保留着当初的设计手稿.在近日荷兰举办的Festival of Games 游戏大会上Toru 展示了这些30年来头的手稿. 吃豆人:由Namco 公司岩谷彻设计,通过Midway games 在1980年发型,灵感来自馅饼的一角.(编辑 张澄)

第一人称视角版的《吃豆人》(FPS-Man)游戏大冒险,既现代又复古的新感受

class="post_content" itemprop="articleBody"> 在一个危机四伏的漆黑迷宫里,你饿了,只有发光的球体能够喂饱你--这就是吃豆人(Pac-man)游戏.自由职业的游戏开发者汤姆·戴维斯,却将该游戏转换到了第一人称视角,并将之重新命名为 FPS-Man 后放到了 Kongregate 网站上-- 在紧张的音效和更加身临其境的氛围中,"吃豆人"再次展开了它的第一人称视角大冒险.FPS-Man 并不是生化危机