Processing 自动贪吃蛇脚本

这篇博客介绍了作者在期末课题中使用Processing编写的贪吃蛇游戏,具备手动和自动两种模式。游戏开始时默认手动控制,失败后可以重启或选择AI模式。AI模式提供了两种不同的距离计算方式,分别是曼哈顿距离和欧拉距离。代码适用于Processing 2.x版本,可供直接运行。
摘要由CSDN通过智能技术生成

スマートインフォメディアシステム特論 期末课题

用Processing写贪吃蛇脚本,有手动和自动两种模式,程序开始直接手动控制,GG一次后可以选择RESTART重新开始,或者AI MODE进入自动模式。其中AI MODE模式有两种报酬计算方法,或者两种距离算法,distance_type=1 表示曼哈顿距离, distance_type=2 表示欧拉距离。具体代码直接贴出来,放到Processing 2.XX 里应该是可以直接运行的。
int game_pause = -1;
int snake_length_max = 800;
int snake_length = 10;
int grid = 10;
int Length = 600;
int score = 0;
int count = 0;
int frame_rate = 15;
int distance_type = 1;
char snake_direction = 'L';
char snake_direction_tmp = snake_direction;
boolean food_eaten = true;
boolean stop = false;
boolean ai_flag = true;

PVector [] snake = new PVector[snake_length_max];
PVector food;
PVector [] neighbor = new PVector[4];

int interval = 100;
int button_width = 150;
int button_height = 50;
boolean rectOver1, rectOver2, rectOver3 = false;

char [] direction_array = new char[4];

void setup(){
   
  size(600, 800);
  make_background();
  frameRate(frame_rate);
  initial_snake();
  food = new PVector(Length/4, Length/4);
  
  direction_array[0] = 'U';
  direction_array[1] = 'L';
  direction_array[2] = 'D';
  direction_array[3] = 'R';
  
for (int i=0; i<4; i++){
   
   neighbor[i] = new PVector(0,0); 
}

}

void draw(){
   
  
  count++;
  make_background();
  draw_arrow();
  draw_food();

  if (ai_flag && count > 2){
   
     ai_mode(); 
  }
  
  if(!stop){
    
    switch(snake_direction) {
   
       case 'L':
         snake[0].set(snake[0].x-grid, snake[0].y);
         break;
       
       case 'R':
         snake[0].set(snake[0].x+grid, snake[0].y);
         break;         

       case 'D':
         snake[0].set(snake[0].x, snake[0].y+grid);
         break;
         
       case 'U':
         snake[0].set(snake[0].x, snake[0].y-grid);
         break;
   }
  }
   if (snake_direction != 'P'){
   
     check_snake_end(); 
   }
   draw_snake();
  
   if (snake[0].x == food.x && snake[0].y == food.y){
   
      food_eaten = true;
      snake_length++;
      score+=10;
      frame_rate++;
      frameRate(frame_rate);
   }

}

void initial_snake()
{
   
   for (int i = snake_length-1; i >= 0 ; i--){
   
      snake[i] = new PVector(Length/2, Length/2-i);
   }
}

void draw_snake(){
   
  
  if (snake_direction != 'P' && !stop){
   
  for (int i = snake_length - 1; i>0; i--){
   
      if (i == snake_length - 1){
   
         snake[i] = new PVector(snake[i-1].x, snake[i-1].y); 
      }
      else{
   
         snake[i].set(snake[i-1].x, snake[i-1].y);
      }
   }
  }
   
   fill(50, 131, 168);
   for(int i=0; i
  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值