zoj 1056 简单的贪吃蛇

一道简单的模拟贪吃蛇的题!http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1056

开先一直wa,总觉得自己的算法没错,可是有老是wa,郁闷死了!于是今天下定决心一定要找出bug,在奋斗几个小时后,终于让我找到了,55555555555555,伤心,原来是在判断E时撞到自己身子的时候的输出语句写错了,啊啊啊啊啊啊,丢死人啦,这种低级错误!唉。。。。。

import java.util.Scanner; public class EMain { private static int n; public static void main(String[] args) { Scanner sc = new Scanner(System.in); while (true) { n = sc.nextInt(); if (n == 0) break; String str = sc.next(); int[][] board = new int[52][52]; // 初始化 int[][] snake = new int[20][2];// 贪吃蛇 for (int i = 0; i < 20; i++) { snake[i][0] = 25; snake[i][1] = 11 + i; //System.out.println(snake[i][1]); board[25][11 + i] = 1; } go(n, str, snake, board); } } private static void go(int n , String str , int[][] snake , int[][] board) { for (int i = 0; i < n; i++) { char ch = str.charAt(i); if (ch == 'N') { int r = snake[19][0] - 1;// 行 if (r < 1) { //判断是否出界 System.out.println("The worm ran off the board on move " + (i + 1) + "."); return; } int c = snake[19][1];// 列 board[snake[0][0]][snake[0][1]] = 0; if (board[r][c] == 1) {//判断头部是否撞到身子 System.out.println("The worm ran into itself on move " + (i + 1) + "."); return; } else { board[r][c] = 1; move(snake, r, c); } } else if (ch == 'S') { int r = snake[19][0] + 1; if (r > 50) {//判断是否出界 System.out.println("The worm ran off the board on move " + (i + 1) + "."); return; } int c = snake[19][1]; board[snake[0][0]][snake[0][1]] = 0; if (board[r][c] == 1) { System.out.println("The worm ran into itself on move " + (i + 1) + "."); return; } else { board[r][c] = 1; move(snake, r, c); } } else if (ch == 'W') { int c = snake[19][1] - 1; if (c < 1) {//判断是否出界 System.out.println("The worm ran off the board on move " + (i + 1) + "."); return; } int r = snake[19][0]; board[snake[0][0]][snake[0][1]] = 0; if (board[r][c] == 1) { System.out.println("The worm ran into itself on move " + (i + 1) + "."); return; } else { board[r][c] = 1; move(snake, r, c); } } else if (ch == 'E') { int c = snake[19][1] + 1; if (c > 50) { System.out.println("The worm ran off the board on move " + (i + 1) + "."); return; } int r = snake[19][0]; board[snake[0][0]][snake[0][1]] = 0; if (board[r][c] == 1) { System.out.println("The worm ran into itself on move " + (i + 1) + ".");//就这里写成 System.out.println("The worm ran off the board on move " + (i + 1) + "."); return; } else { board[r][c] = 1; move(snake, r, c); } } // for(int k = 1 ; k < 51 ; k++){ // for(int j = 1 ; j < 51 ;j++ ){ // System.out.print(board[k][j]); // } // System.out.println(); // } } System.out.println("The worm successfully made all " + n + " moves."); } private static void move(int[][] snake, int r, int c) { for (int i = 0; i < 19; i++) { snake[i][0] = snake[i + 1][0]; snake[i][1] = snake[i + 1][1]; } snake[19][0] = r; snake[19][1] = c; } }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值