斗獸棋是一種運用階級吃子的版圖益智類游戲,游戲雙方在9x7格的版圖上操作八只以動物命名的棋子,其中任意一方棋子走進對方獸穴或吃光對方所有棋子者勝。
成都創(chuàng)新互聯(lián)公司公司2013年成立,先為米東等服務(wù)建站,米東等地企業(yè),進行企業(yè)商務(wù)咨詢服務(wù)。為米東企業(yè)網(wǎng)站制作PC+手機+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。
游戲中雙方各有八只棋子,依大小順序為象、獅、虎、豹、狗、狼、貓、鼠。大的可以吃小的,同類可以互吃,而鼠則可以吃象,象不能吃鼠。
斗獸棋是塵模一種棋類游戲,雙方有八只棋子,依大小順序為象、獅、虎、豹、犬、狼、貓、鼠。較大的可吃較小的,同類可以互吃,而鼠則可吃象,象不能吃鼠。動物走一格,前后左右都可以。
棋盤橫七列,縱九行。棋子放在格子中。雙方底在線各有三個陷阱(作品字排)和一個獸穴(于品字中間)。如果一方進入了對方的獸穴便勝出。任何一方都不能進入自己的獸穴。如果對方的獸類走進陷阱,己方任何一只獸都可以把它吃掉,如果敵獸進入陷阱,一回合后,自己的獸類不吃掉陷阱中的敵獸,當對方進入己方獸穴時,則本方輸。中間有兩條小河(跟湖差不多)。獅、虎可以橫直方向跳過河,而且可以直接把對岸的動物吃掉。只有鼠可以下水,在水中的鼠可以阻隔獅、虎跳河。兩鼠在水內(nèi)可以互吃。
部份斗獸棋的次序略有不同:象、獅、虎、豹、狼、狗、貓、鼠 。 亦有狗吃狼的。亦有用狐代替狼的:象、獅、虎、豹、狗、狐、貓、鼠。水里的不可直接吃陸上的,陸上的也不可吃水里的。
普通吃法
普通吃法:象〉獅〉虎〉豹〉狗(犬)〉狼〉貓〉鼠。
特殊吃法
斗獸棋特殊吃法說明如下:
1、鼠吃象法:八獸的吃法除按照大小次序外,惟鼠能吃象。
2、互吃法:凡同類相遇,可互相吃。
3、陷阱:棋盤設(shè)陷阱,專為限制敵獸的戰(zhàn)斗力(自己的獸,不受限制),敵獸走入陷阱,即失去戰(zhàn)斗力,本方的任意獸類都可以吃去陷阱里的獸類。每方在獸穴旁設(shè)三個陷阱。
4、 勝負:無論任何一方的獸走入敵方的獸穴就算勝利(自己的獸類不可以走入自己的獸穴),勝利方按級別取得贏分,失敗方扣2分。一方提議作和,對方同意此時作和,和局雙方不扣分。
在電腦游戲中的碰姿異常處理雙方走棋出現(xiàn)循環(huán)反復(fù)達三次以上,首先走棋的人如不變著作認輸論處。
2、游戲進行中不正常離局者,斷線次數(shù)加1次,并扣十分游戲金幣數(shù)。
3、若是某個玩家在規(guī)定時間內(nèi)沒有任何響應(yīng),游戲程序?qū)⑻嫠F逡徊剑⒃黾映瑫r一次,三次以上超時(不包括三次)作認輸論處。
4規(guī)則玩法
基本規(guī)則
棋盤:9x7格
斗獸棋棋盤和棋子:斗獸棋棋子共十六個,分為紅黃兩組,各八個,由雙方各執(zhí)一組,獸類是一樣。
分為八種:
紅派吵緩方:象、獅、虎、豹、狼、狗(犬)、貓、鼠
黃方:象、獅、虎、豹、狼、狗(犬)、貓、鼠
棋子活動的場所,叫做“棋盤”,在長方形的平面上,有橫九豎七共六十三個格子組成,棋子就擺在這些格子內(nèi)。棋盤內(nèi)有兩條小河,河上有三座橋可以通過。
基本玩法
每只動物每次走一方格,前后左右均可,但是獅、虎、鼠三種獸類,還有不同走法,說明如下:
1、獅虎跳河法:棋盤中有兩條河,獅虎過河,可以縱橫對直跳過,并且在跳得方格內(nèi),也能把敵方較小的獸類吃掉,但是如果老鼠在河里,把跳的路線阻隔就不能跳。
2、鼠入水中法:鼠過河可以走入水中(走法同陸地),如鼠在河里,陸地上的獸類都不能吃它,鼠亦不能吃陸地上的象。當兩鼠在河內(nèi)相遇,可以互吃。
新建一個project,新建一個哪派鬧類
把代碼貼進去,找到運行(run)這個按鈕,按了就能運行,找不到的話快捷鍵是Ctrl + F11
import java.awt.Color;
import java.awt.Component;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.ArrayList;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
public class SnakeGame {
public static void main(String[] args) {
SnakeFrame frame = new SnakeFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
/羨悶/ ----------記錄狀態(tài)的線程李罩
class StatusRunnable implements Runnable {
public StatusRunnable(Snake snake, JLabel statusLabel, JLabel scoreLabel) {
this.statusLabel = statusLabel;
this.scoreLabel = scoreLabel;
this.snake = snake;
}
public void run() {
String sta = "";
String spe = "";
while (true) {
switch (snake.status) {
case Snake.RUNNING:
sta = "Running";
break;
case Snake.PAUSED:
sta = "Paused";
break;
case Snake.GAMEOVER:
sta = "GameOver";
break;
}
statusLabel.setText(sta);
scoreLabel.setText("" + snake.score);
try {
Thread.sleep(100);
} catch (Exception e) {
}
}
}
private JLabel scoreLabel;
private JLabel statusLabel;
private Snake snake;
}
// ----------蛇運動以及記錄分數(shù)的線程
class SnakeRunnable implements Runnable {
public SnakeRunnable(Snake snake, Component component) {
this.snake = snake;
this點抗 ponent = component;
}
public void run() {
while (true) {
try {
snake.move();
component.repaint();
Thread.sleep(snake.speed);
} catch (Exception e) {
}
}
}
private Snake snake;
private Component component;
}
class Snake {
boolean isRun;// ---------是否運動中
ArrayListNode body;// -----蛇體
Node food;// --------食物
int derection;// --------方向
int score;
int status;
int speed;
public static final int SLOW = 500;
public static final int MID = 300;
public static final int FAST = 100;
public static final int RUNNING = 1;
public static final int PAUSED = 2;
public static final int GAMEOVER = 3;
public static final int LEFT = 1;
public static final int UP = 2;
public static final int RIGHT = 3;
public static final int DOWN = 4;
public Snake() {
speed = Snake.SLOW;
score = 0;
isRun = false;
status = Snake.PAUSED;
derection = Snake.RIGHT;
body = new ArrayListNode();
body.add(new Node(60, 20));
body.add(new Node(40, 20));
body.add(new Node(20, 20));
makeFood();
}
// ------------判斷食物是否被蛇吃掉
// -------如果食物在蛇運行方向的正前方,并且與蛇頭接觸,則被吃掉
private boolean isEaten() {
Node head = body.get(0);
if (derection == Snake.RIGHT (head.x + Node.W) == food.x
head.y == food.y)
return true;
if (derection == Snake.LEFT (head.x - Node.W) == food.x
head.y == food.y)
return true;
if (derection == Snake.UP head.x == food.x
(head.y - Node.H) == food.y)
return true;
if (derection == Snake.DOWN head.x == food.x
(head.y + Node.H) == food.y)
return true;
else
return false;
}
// ----------是否碰撞
private boolean isCollsion() {
Node node = body.get(0);
// ------------碰壁
if (derection == Snake.RIGHT node.x == 280)
return true;
if (derection == Snake.UP node.y == 0)
return true;
if (derection == Snake.LEFT node.x == 0)
return true;
if (derection == Snake.DOWN node.y == 380)
return true;
// --------------蛇頭碰到蛇身
Node temp = null;
int i = 0;
for (i = 3; i body.size(); i++) {
temp = body.get(i);
if (temp.x == node.x temp.y == node.y)
break;
}
if (i body.size())
return true;
else
return false;
}
// -------在隨機的地方產(chǎn)生食物
public void makeFood() {
Node node = new Node(0, 0);
boolean isInBody = true;
int x = 0, y = 0;
int X = 0, Y = 0;
int i = 0;
while (isInBody) {
x = (int) (Math.random() * 15);
y = (int) (Math.random() * 20);
X = x * Node.W;
Y = y * Node.H;
for (i = 0; i body.size(); i++) {
if (X == body.get(i).x Y == body.get(i).y)
break;
}
if (i body.size())
isInBody = true;
else
isInBody = false;
}
food = new Node(X, Y);
}
// ---------改變運行方向
public void changeDerection(int newDer) {
if (derection % 2 != newDer % 2)// -------如果與原來方向相同或相反,則無法改變
derection = newDer;
}
public void move() {
if (isEaten()) {// -----如果食物被吃掉
body.add(0, food);// --------把食物當成蛇頭成為新的蛇體
score += 10;
makeFood();// --------產(chǎn)生食物
} else if (isCollsion())// ---------如果碰壁或自身
{
isRun = false;
status = Snake.GAMEOVER;// -----結(jié)束
} else if (isRun) {// ----正常運行(不吃食物,不碰壁,不碰自身)
Node node = body.get(0);
int X = node.x;
int Y = node.y;
// ------------蛇頭按運行方向前進一個單位
switch (derection) {
case 1:
X -= Node.W;
break;
case 2:
Y -= Node.H;
break;
case 3:
X += Node.W;
break;
case 4:
Y += Node.H;
break;
}
body.add(0, new Node(X, Y));
// ---------------去掉蛇尾
body.remove(body.size() - 1);
}
}
}
// ---------組成蛇身的單位,食物
class Node {
public static final int W = 20;
public static final int H = 20;
int x;
int y;
public Node(int x, int y) {
this.x = x;
this.y = y;
}
}
// ------畫板
class SnakePanel extends JPanel {
Snake snake;
public SnakePanel(Snake snake) {
this.snake = snake;
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
Node node = null;
for (int i = 0; i snake.body.size(); i++) {// ---紅藍間隔畫蛇身
if (i % 2 == 0)
g.setColor(Color.blue);
else
g.setColor(Color.yellow);
node = snake.body.get(i);
g.fillRect(node.x, node.y, node.H, node.W);// *******************試用*********************
}
node = snake.food;
g.setColor(Color.red);
g.fillRect(node.x, node.y, node.H, node.W);
}
}
class SnakeFrame extends JFrame {
private JLabel statusLabel;
private JLabel speedLabel;
private JLabel scoreLabel;
private JPanel snakePanel;
private Snake snake;
private JMenuBar bar;
JMenu gameMenu;
JMenu helpMenu;
JMenu speedMenu;
JMenuItem newItem;
JMenuItem pauseItem;
JMenuItem beginItem;
JMenuItem helpItem;
JMenuItem aboutItem;
JMenuItem slowItem;
JMenuItem midItem;
JMenuItem fastItem;
public SnakeFrame() {
init();
ActionListener l = new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (e.getSource() == pauseItem)
snake.isRun = false;
if (e.getSource() == beginItem)
snake.isRun = true;
if (e.getSource() == newItem) {
newGame();
}
// ------------菜單控制運行速度
if (e.getSource() == slowItem) {
snake.speed = Snake.SLOW;
speedLabel.setText("Slow");
}
if (e.getSource() == midItem) {
snake.speed = Snake.MID;
speedLabel.setText("Mid");
}
if (e.getSource() == fastItem) {
snake.speed = Snake.FAST;
speedLabel.setText("Fast");
}
}
};
pauseItem.addActionListener(l);
beginItem.addActionListener(l);
newItem.addActionListener(l);
aboutItem.addActionListener(l);
slowItem.addActionListener(l);
midItem.addActionListener(l);
fastItem.addActionListener(l);
addKeyListener(new KeyListener() {
public void keyPressed(KeyEvent e) {
switch (e.getKeyCode()) {
// ------------方向鍵改變蛇運行方向
case KeyEvent.VK_DOWN://
snake.changeDerection(Snake.DOWN);
break;
case KeyEvent.VK_UP://
snake.changeDerection(Snake.UP);
break;
case KeyEvent.VK_LEFT://
snake.changeDerection(Snake.LEFT);
break;
case KeyEvent.VK_RIGHT://
snake.changeDerection(Snake.RIGHT);
break;
// 空格鍵,游戲暫停或繼續(xù)
case KeyEvent.VK_SPACE://
if (snake.isRun == true) {
snake.isRun = false;
snake.status = Snake.PAUSED;
break;
}
if (snake.isRun == false) {
snake.isRun = true;
snake.status = Snake.RUNNING;
break;
}
}
}
public void keyReleased(KeyEvent k) {
}
public void keyTyped(KeyEvent k) {
}
});
}
private void init() {
speedLabel = new JLabel();
snake = new Snake();
setSize(380, 460);
setLayout(null);
this.setResizable(false);
bar = new JMenuBar();
gameMenu = new JMenu("Game");
newItem = new JMenuItem("New Game");
gameMenu.add(newItem);
pauseItem = new JMenuItem("Pause");
gameMenu.add(pauseItem);
beginItem = new JMenuItem("Continue");
gameMenu.add(beginItem);
helpMenu = new JMenu("Help");
aboutItem = new JMenuItem("About");
helpMenu.add(aboutItem);
speedMenu = new JMenu("Speed");
slowItem = new JMenuItem("Slow");
fastItem = new JMenuItem("Fast");
midItem = new JMenuItem("Middle");
speedMenu.add(slowItem);
speedMenu.add(midItem);
speedMenu.add(fastItem);
bar.add(gameMenu);
bar.add(helpMenu);
bar.add(speedMenu);
setJMenuBar(bar);
statusLabel = new JLabel();
scoreLabel = new JLabel();
snakePanel = new JPanel();
snakePanel.setBounds(0, 0, 300, 400);
snakePanel.setBorder(BorderFactory.createLineBorder(Color.darkGray));
add(snakePanel);
statusLabel.setBounds(300, 25, 60, 20);
add(statusLabel);
scoreLabel.setBounds(300, 20, 60, 20);
add(scoreLabel);
JLabel temp = new JLabel("狀態(tài)");
temp.setBounds(310, 5, 60, 20);
add(temp);
temp = new JLabel("分數(shù)");
temp.setBounds(310, 105, 60, 20);
add(temp);
temp = new JLabel("速度");
temp.setBounds(310, 55, 60, 20);
add(temp);
speedLabel.setBounds(310, 75, 60, 20);
add(speedLabel);
}
private void newGame() {
this.remove(snakePanel);
this.remove(statusLabel);
this.remove(scoreLabel);
speedLabel.setText("Slow");
statusLabel = new JLabel();
scoreLabel = new JLabel();
snakePanel = new JPanel();
snake = new Snake();
snakePanel = new SnakePanel(snake);
snakePanel.setBounds(0, 0, 300, 400);
snakePanel.setBorder(BorderFactory.createLineBorder(Color.darkGray));
Runnable r1 = new SnakeRunnable(snake, snakePanel);
Runnable r2 = new StatusRunnable(snake, statusLabel, scoreLabel);
Thread t1 = new Thread(r1);
Thread t2 = new Thread(r2);
t1.start();
t2.start();
add(snakePanel);
statusLabel.setBounds(310, 25, 60, 20);
add(statusLabel);
scoreLabel.setBounds(310, 125, 60, 20);
add(scoreLabel);
}
}
斗獸棋的正確玩法:游戲開始時,紅方先走,然后輪饑畢流走棋。每次可走動一只獸,每只獸每次走一方格,除己方獸穴和小河以外,前后左右均可。
斗獸棋是一款非常有趣的對戰(zhàn)皮手棋類游戲,游戲的基本還是利用傳統(tǒng)的對戰(zhàn)的方式,但是,游戲卻沒有用傳統(tǒng)的文字作為棋子,而是創(chuàng)造性的將棋子改成了動物,真正的符合了斗獸棋這個名字,趣味無窮。 游戲分為紅藍兩方,每方8顆棋子,棋子按照大小順序象獅虎豹狼狗貓鼠進行吃子,鼠能吃象。誰的燃肢嫌棋子最先被吃完,誰就輸?shù)袅诉@場比賽
當前標題:斗獸棋java小程序代碼 斗獸棋python
網(wǎng)頁網(wǎng)址:http://jinyejixie.com/article40/ddpihho.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供關(guān)鍵詞優(yōu)化、自適應(yīng)網(wǎng)站、品牌網(wǎng)站建設(shè)、云服務(wù)器、網(wǎng)站排名、域名注冊
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)