编写简单消消乐C,C#,java,都可以 C++,JAVA,C,C#,BASIC,……;哪一个学习起来...

\u5927\u795e\u4eec\u80fd\u63d0\u4f9b\u4e00\u4e0b\u4e00\u4e2ajs\u7248\u7684\u7b80\u5355\u6d88\u6d88\u4e50\u4ee3\u7801\u4e48\uff0c\u601d\u8def\u4e5f\u53ef\u4ee5\uff0c\u62dc\u6258\u4e86

\u8fd9\u5e94\u8be5\u548c2048\u6709\u76f8\u4f3c\u4e4b\u5904\uff0c\u7f51\u4e0a\u6709\u5f88\u591a\uff0c\u4e5f\u4e0d\u662f\u4e09\u4e24\u53e5\u8bdd\u80fd\u8bf4\u6e05\u7684

c++ \u529f\u80fd\u5f3a\u5927\uff0c\u5b66\u8d77\u6765\u6162
java \u7b80\u5355\u660e\u4e86\u5b66\u8d77\u6765\uff0c\u529f\u80fd\u4e5f\u5168\u90e8\u80fd\u5b9e\u73b0\u3002

\u6c47\u7f16\u5b66\u8d77\u6765\u662f\u6700\u7b80\u5355\u7684\u3002 \u529f\u80fd\u6700\u5f3a\u5927\u7684\u3002
\u5c31\u662f\u628a\u57fa\u672c\u7684\u5b66\u4f1a\u4e86\u770b\u4f60\u77e5\u4e0d\u77e5\u9053\u600e\u4e48\u505a\u4e1c\u897f\u4e86\u3002

\u6700\u540e\u80fd\u8bf4\u7684\u662f\u8981\u505a\u597d\u591a\u96be\u3002\u3002\u3002

\u6c47\u7f16\u5b66\u8d77\u6765\u662f\u6700\u7b80\u5355\u7684\u3002 \u4f46\u662f\u4f60\u8981\u505a\u597d\u662f\u5f88\u96be\u7684\uff01\uff01

有一个我们老师编写的贪吃蛇程序 供你参考一下:
GreedSnake.java (也是程序入口):

import java.awt.BorderLayout;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Container;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Iterator;
import java.util.LinkedList;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class GreedSnake implements KeyListener {
JFrame mainFrame;

Canvas paintCanvas;

JLabel labelScore;// 计分牌

SnakeModel snakeModel = null;// 蛇

public static final int canvasWidth = 200;

public static final int canvasHeight = 300;

public static final int nodeWidth = 10;

public static final int nodeHeight = 10;

// ----------------------------------------------------------------------
// GreedSnake():初始化游戏界面
// ----------------------------------------------------------------------
public GreedSnake() {
// 设置界面元素
mainFrame = new JFrame("GreedSnake");
Container cp = mainFrame.getContentPane();
labelScore = new JLabel("Score:");
cp.add(labelScore, BorderLayout.NORTH);
paintCanvas = new Canvas();
paintCanvas.setSize(canvasWidth + 1, canvasHeight + 1);
paintCanvas.addKeyListener(this);
cp.add(paintCanvas, BorderLayout.CENTER);
JPanel panelButtom = new JPanel();
panelButtom.setLayout(new BorderLayout());
JLabel labelHelp;// 帮助信息
labelHelp = new JLabel("PageUp, PageDown for speed;", JLabel.CENTER);
panelButtom.add(labelHelp, BorderLayout.NORTH);
labelHelp = new JLabel("ENTER or R or S for start;", JLabel.CENTER);
panelButtom.add(labelHelp, BorderLayout.CENTER);
labelHelp = new JLabel("SPACE or P for pause", JLabel.CENTER);
panelButtom.add(labelHelp, BorderLayout.SOUTH);
cp.add(panelButtom, BorderLayout.SOUTH);
mainFrame.addKeyListener(this);
mainFrame.pack();
mainFrame.setResizable(false);
mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mainFrame.setVisible(true);
begin();
}

// ----------------------------------------------------------------------
// keyPressed():按键检测
// ----------------------------------------------------------------------
public void keyPressed(KeyEvent e) {
int keyCode = e.getKeyCode();
if (snakeModel.running)
switch (keyCode) {
case KeyEvent.VK_UP:
snakeModel.changeDirection(SnakeModel.UP);
break;
case KeyEvent.VK_DOWN:
snakeModel.changeDirection(SnakeModel.DOWN);
break;
case KeyEvent.VK_LEFT:
snakeModel.changeDirection(SnakeModel.LEFT);
break;
case KeyEvent.VK_RIGHT:
snakeModel.changeDirection(SnakeModel.RIGHT);
break;
case KeyEvent.VK_ADD:
case KeyEvent.VK_PAGE_UP:
snakeModel.speedUp();// 加速
break;
case KeyEvent.VK_SUBTRACT:
case KeyEvent.VK_PAGE_DOWN:
snakeModel.speedDown();// 减速
break;
case KeyEvent.VK_SPACE:
case KeyEvent.VK_P:
snakeModel.changePauseState();// 暂停或继续
break;
default:
}
// 重新开始
if (keyCode == KeyEvent.VK_R || keyCode == KeyEvent.VK_S
|| keyCode == KeyEvent.VK_ENTER) {
snakeModel.running = false;
begin();
}
}

// ----------------------------------------------------------------------
// keyReleased():空函数
// ----------------------------------------------------------------------
public void keyReleased(KeyEvent e) {
}

// ----------------------------------------------------------------------
// keyTyped():空函数
// ----------------------------------------------------------------------
public void keyTyped(KeyEvent e) {
}

// ----------------------------------------------------------------------
// repaint():绘制游戏界面(包括蛇和食物)
// ----------------------------------------------------------------------
void repaint() {
Graphics g = paintCanvas.getGraphics();
// draw background
g.setColor(Color.WHITE);
g.fillRect(0, 0, canvasWidth, canvasHeight);
// draw the snake
g.setColor(Color.BLACK);
LinkedList na = snakeModel.nodeArray;
Iterator it = na.iterator();
while (it.hasNext()) {
Node n = (Node) it.next();
drawNode(g, n);
}
// draw the food
g.setColor(Color.RED);
Node n = snakeModel.food;
drawNode(g, n);
updateScore();
}

// ----------------------------------------------------------------------
// drawNode():绘画某一结点(蛇身或食物)
// ----------------------------------------------------------------------
private void drawNode(Graphics g, Node n) {
g.fillRect(n.x * nodeWidth, n.y * nodeHeight, nodeWidth - 1,
nodeHeight - 1);
}

// ----------------------------------------------------------------------
// updateScore():改变计分牌
// ----------------------------------------------------------------------
public void updateScore() {
String s = "Score: " + snakeModel.score;
labelScore.setText(s);
}

// ----------------------------------------------------------------------
// begin():游戏开始,放置贪吃蛇
你可以参考一下 每次遇到不会的都来求助是很不方便的
如果你想了解和学习更多的JAVA编程,成为一名真正的JAVA高手,你可以来这个裙,前面三个数是四二六 中间是三九六 后面是二八四
把这串数字连起来就可以了,这是一个高手的学习裙,在这里你可以学习到书上学不到的知识,还有大牛相互讨论并指导你解答哦!
// ----------------------------------------------------------------------
void begin() {
if (snakeModel == null || !snakeModel.running) {
snakeModel = new SnakeModel(this, canvasWidth / nodeWidth,
this.canvasHeight / nodeHeight);
(new Thread(snakeModel)).start();
}
}

// ----------------------------------------------------------------------
// main():主函数
// ----------------------------------------------------------------------
public static void main(String[] args) {
GreedSnake gs = new GreedSnake();
}
}

Node.java:

public class Node {

int x;

int y;

Node(int x, int y) {
this.x = x;
this.y = y;
}

}

SnakeModel.java:

import java.util.Arrays;
import java.util.LinkedList;
import java.util.Random;

import javax.swing.JOptionPane;

public class SnakeModel implements Runnable {
GreedSnake gs;

boolean[][] matrix;// 界面数据保存在数组里

LinkedList nodeArray = new LinkedList();

Node food;

int maxX;// 最大宽度

int maxY;// 最大长度

int direction = 2;// 方向

boolean running = false;

int timeInterval = 200;// 间隔时间(速度)

double speedChangeRate = 0.75;// 速度改变程度

boolean paused = false;// 游戏状态

int score = 0;

int countMove = 0;

// UP和DOWN是偶数,RIGHT和LEFT是奇数
public static final int UP = 2;

public static final int DOWN = 4;

public static final int LEFT = 1;

public static final int RIGHT = 3;

// ----------------------------------------------------------------------
// GreedModel():初始化界面
// ----------------------------------------------------------------------
public SnakeModel(GreedSnake gs, int maxX, int maxY) {
this.gs = gs;
this.maxX = maxX;
this.maxY = maxY;
matrix = new boolean[maxX][];
for (int i = 0; i < maxX; ++i) {
matrix[i] = new boolean[maxY];
Arrays.fill(matrix[i], false);// 没有蛇和食物的地区置false
}
// 初始化贪吃蛇
int initArrayLength = maxX > 20 ? 10 : maxX / 2;
for (int i = 0; i < initArrayLength; ++i) {
int x = maxX / 2 + i;
int y = maxY / 2;
nodeArray.addLast(new Node(x, y));
matrix[x][y] = true;// 蛇身处置true
}
food = createFood();
matrix[food.x][food.y] = true;// 食物处置true
}

// ----------------------------------------------------------------------
// changeDirection():改变运动方向
// ----------------------------------------------------------------------
public void changeDirection(int newDirection) {
if (direction % 2 != newDirection % 2)// 避免冲突
{
direction = newDirection;
}
}

// ----------------------------------------------------------------------
// moveOn():贪吃蛇运动函数
// ----------------------------------------------------------------------
public boolean moveOn() {
Node n = (Node) nodeArray.getFirst();
int x = n.x;
int y = n.y;
switch (direction) {
case UP:
y--;
break;
case DOWN:
y++;
break;
case LEFT:
x--;
break;
case RIGHT:
x++;
break;
}
if ((0 <= x && x < maxX) && (0 <= y && y < maxY)) {
if (matrix[x][y])// 吃到食物或者撞到身体
{
if (x == food.x && y == food.y)// 吃到食物
{
nodeArray.addFirst(food);// 在头部加上一结点
// 计分规则与移动长度和速度有关
int scoreGet = (10000 - 200 * countMove) / timeInterval;
score += scoreGet > 0 ? scoreGet : 10;
countMove = 0;
food = createFood();
matrix[food.x][food.y] = true;
return true;
} else
return false;// 撞到身体
} else// 什么都没有碰到
{
nodeArray.addFirst(new Node(x, y));// 加上头部
matrix[x][y] = true;
n = (Node) nodeArray.removeLast();// 去掉尾部
matrix[n.x][n.y] = false;
countMove++;
return true;
}
}
return false;// 越界(撞到墙壁)
}

// ----------------------------------------------------------------------
// run():贪吃蛇运动线程
// ----------------------------------------------------------------------
public void run() {
running = true;
while (running) {
try {
Thread.sleep(timeInterval);
} catch (Exception e) {
break;
}
if (!paused) {
if (moveOn())// 未结束
{
gs.repaint();
} else// 游戏结束
{
JOptionPane.showMessageDialog(null, "GAME OVER",
"Game Over", JOptionPane.INFORMATION_MESSAGE);
break;
}
}
}
running = false;
}

// ----------------------------------------------------------------------
// createFood():生成食物及放置地点
// ----------------------------------------------------------------------
private Node createFood() {
int x = 0;
int y = 0;
do {
Random r = new Random();
x = r.nextInt(maxX);
y = r.nextInt(maxY);
} while (matrix[x][y]);
return new Node(x, y);
}

// ----------------------------------------------------------------------
// speedUp():加快蛇运动速度
// ----------------------------------------------------------------------
public void speedUp() {
timeInterval *= speedChangeRate;
}

// ----------------------------------------------------------------------
// speedDown():放慢蛇运动速度
// ----------------------------------------------------------------------
public void speedDown() {
timeInterval /= speedChangeRate;
}

// ----------------------------------------------------------------------
// changePauseState(): 改变游戏状态(暂停或继续)
// ----------------------------------------------------------------------
public void changePauseState() {
paused = !paused;
}
}
满意请采纳

提供下我的思路,仅供参考:
1、为每一类的方块做一个对象(比如红色是一个类;蓝色是一个类……)
2、写一个方法中,将所有方块放在一个数组中,再两个for循环遍历横纵坐标(整个游戏界面大小),将二维数组的值赋给随机一个方块类对象。当整个界面填满后,还要再两个for循环遍历,根据游戏规则设定(三个一消,四个一消生一个新的,五个一消也生一个新的),那么两个循环每进入一个变量i,j,都要将至少有三个一样的当前坐标的类对象赋值给外面的公共变量(创建5个变量,因为可能5个一起的消除),还要判断当4个一样的后创建一个新的,并标记它的特性,5个的一样。3个一样以上的需要删除,并且要将被消除的坐标对象从纵坐标上赋值过来,同时在这两个循环之外还要套一个while,因为可能因为新的横纵坐标对象也有可消除的,可以用一个变量的状态来确定是否还有可消除对象,没有就跳出while。还有一点没说,当最顶上的对象消失后,可以新创建类对象。
3、选中坐标对象,与周围坐标对象赋值交换,一个temp变量在中间赋值。然后再进入那个遍历坐标界面的while方法。设置一个全局变量为可操作的总次数,交换一次,减少一次,并给总次数赋值回去。
……
还有很多步骤,并且我说的也有缺漏,要实际做才能确定,不过核心思路大致如此吧。
看似简单的小游戏,其实里面逻辑还是一定有的,不要小看那些游戏的制作,都是费心费力完成的。

  • 浜屾鍏娑堟秷涔鎵嬫父
    绛旓細澹圭瑧娑堟秷涔瀹樻柟浠嬬粛澹圭瑧娑堟秷涔愭槸涓娆炬秷娑堜箰鍏冪礌鐨勪紤闂茬泭鏅猴紝缁忓吀鐨勭帺娉曪紝涓嶄竴鏍风殑鍏冲崱锛屽9绗戞秷娑堜箰閲囩敤绠娲佹竻鏂扮殑娓告垙椋庢牸鏋勫缓浜嗕竴涓叮鍛虫秷闄や笘鐣屻備赴瀵岀殑娓告垙鍦烘櫙鍜屽畬鍠勭殑閬撳叿绯荤粺浣挎父鎴忔洿鍏疯叮鍛虫у拰鎸戞垬鎬э紝鏇存湁涓板瘜鍏冲崱绛変綘鏉ユ寫鎴橈紒鎵嬫父鐗硅壊-杞绘澗婊戝姩鎵嬫寚鍗冲彲鎿嶄綔,鐜╂硶绠鍗鏄撲笂鎵嬶紒-浼撮殢鍚勭涓嶅悓鐨勯殰纰...
  • 寮蹇娑堟秷涔鏈夊摢浜涘叧鍗$被鍨
    绛旓細c) 鑾峰緱閲戣眴鑽氬湪涓瀹氭鏁板唴锛屼娇瓒冲鏁伴噺鐨勯噾璞嗚崥绉诲姩鍒版敹闆嗗彛澶勫嵆鍙繃鍏炽俤) 浜戞湹鍏冲崱鍦ㄤ竴瀹氭鏁版垨鏃堕棿鍐咃紝鍙鑾峰緱鐨勫疂鐭虫暟杈惧埌鐩爣鍗冲彲杩囧叧銆備互涓婂氨鏄皬缂栦负澶у鎻愪緵鐨勫紑蹇娑堟秷涔鍏冲崱绫诲瀷璇﹁В锛屾兂浜嗚В鏇村鐨勪俊鎭紝璇峰叧娉ㄣ愭繁绌烘墜娓哥綉銆戝紑蹇冩秷娑堜箰涓撻锛屾垨鍏虫敞鎴戜滑锛屽皬缂栧皢涓轰綘鎸佺画鏇存柊姣忎竴鍏冲崱鐨勯氬叧鏀荤暐...
  • 鎴愯娑堟秷涔绗44鍏崇瓟妗 鎴愯娑堟秷涔愮44鍏虫敾鐣
    绛旓細鎴愯娑堟秷涔51鍏崇瓟妗堟槸浠涔 鐖舵瘝閬椾綋锛岃憚鏋曞浘鍙诧紝Ou楦熷繕鏈猴紝浜烘儏涓栨晠锛佸井淇″皬绋嬪簭鎴愯娑堟秷涔48鍏崇瓟妗 鎴愯娑堟秷涔48鍏崇瓟妗堬細銆愭垚璇戯細 鑽夎埞鍊熺 銆愭嫾Yin銆戯細 c菐o chu菐n ji猫 ji脿n 銆愯В閲娿戯細 杩愮敤鏅鸿皨锛孭ing鍊熶粬浜虹殑浜哄姏鎴栬储鍔涙潵杈惧埌鑷繁鐨勭洰鐨勩傘愬嚭澶勩戯細 鏄幝风綏璐腑銆婁笁鍥結an涔夈嬬46 ...
  • 鏈汉姝e湪瀛C鍜孋++,浣嗕笉鐭ラ亾C鍜孋++閮藉彲浠ュ共鐐逛粈涔,
    绛旓細鍦ㄦ父鎴忓紑鍙戦鍩 甯傞潰涓婄浉褰撳鐨勬父鎴忓紩鎿庨兘鏄熀浜巆++寮鍙戠殑锛屾瘮濡侰ocos2d銆佽櫄骞4绛夛紝杩欎簺娓告垙寮曟搸鐨勪唬琛ㄤ綔鏈夊け钀界殑鏂硅垷銆佺粷鍦版眰鐢熴佸湴鐙变箣鍒冦佷腑鍥借薄妫嬨侀浄鐢典紶璇淬佷縿缃楁柉鏂瑰潡銆佷繚鍗悵鍗溿佹崟楸艰揪浜恒佸紑蹇娑堟秷涔绛夌瓑銆傚湪涓夌淮娓告垙棰嗗煙 涓夌淮娓告垙棰嗗煙鐨勮绠楅噺鏄崄鍒嗗簽澶х殑锛屽簳灞傜殑鏁板鍏ㄩ兘鏄煩闃靛彉鎹紝瑕佹兂鐢婚潰绮剧編...
  • 娑堟秷涔鍗曟満鐗
    绛旓細灏芥儏鐨勫睍鐜拌嚜韬殑澶╂墠澶磋剳锛屾父鎴忎腑鐜╁闇瑕佸敖鍙兘澶氱殑瀹屾垚浠诲姟鐩爣锛屾秷闄よ秺澶氬彲浠ヨ幏鍙栫殑濂栧姳涔熷氨瓒婇珮锛屾帓琛屾绉垎瀹氭椂鍙戝竷锛屾彁楂樻帓鍚嶅嵆鍙簤鎶㈡洿澶氱殑绾㈠寘绂忓埄锛屾父鎴忔搷浣绠鍗曪紝鐜╂硶娓呴棽锛屾劅鍏磋叮鐨勭帺瀹跺彲浠ヤ笅杞戒綋楠屼竴涓嬪摝锛佸垎鏋娑堟秷涔瀹樻柟浠嬬粛鍒嗘灉娑堟秷涔愭父鎴忎腑鐨勫叧鍗℃暟閲忚秴澶氾紝璁╃帺瀹朵滑鎸戞垬鏃跺敖鎯呭睍鐜拌嚜韬殑澶磋剳...
  • 纰扮娑堟秷涔姝g増
    绛旓細涓嬭浇鍦板潃锛歨ttp://www.xyx09.com/301075/ 绫诲瀷锛氬畨鍗撴父鎴-鐩婃櫤浼戦棽 鐗堟湰锛歷3.5 澶у皬锛30.41M 璇█锛氫腑鏂 骞冲彴锛氬畨鍗揂PK 鎺ㄨ崘鏄熺骇锛堣瘎鍒嗭級锛氣槄鈽呪槄 娓告垙鏍囩: 娑堥櫎鎵嬫父 纰扮娑堟秷涔 纰扮娑堟秷涔愶紝璁╀汉鐪艰姳缂贡鐨勭敾闈㈠満鏅瀹氾紝瓒呭涓板瘜鑷敱鎿嶄綔鍏冪礌鍙緵鐜╁闅忓績浣撻獙锛屽湪杩欓噷浣犺繕鍙互鍜...
  • 姘存灉娑堟秷涔娓告垙澶у叏
    绛旓細涓嬭浇鍦板潃锛歨ttp://www.xyx09.com/296980/ 绫诲瀷锛氬畨鍗撴父鎴-鐩婃櫤浼戦棽 鐗堟湰锛歷1.0.2 澶у皬锛0KB 璇█锛氫腑鏂 骞冲彴锛氬畨鍗揂PK 鎺ㄨ崘鏄熺骇锛堣瘎鍒嗭級锛氣槄鈽呪槄 娓告垙鏍囩: 娑堥櫎娓告垙 娑堜綘濡 娑堜綘濡规按鏋滄父鎴忚叮鍛崇殑娑堥櫎蹇劅锛屼赴瀵岀殑妯″紡鐗硅壊鐨勯棷鍏宠浣犲棬涓嶅仠锛屽悇绉嶄赴瀵岀殑閬撳叿浠ュ府鍔╀綘蹇熺殑涓婃墜浣撻獙...
  • 浜屾鍏娑堟秷涔鎵嬫父
    绛旓細涓嬭浇鍦板潃锛歨ttp://www.xyx09.com/293643/ 绫诲瀷锛氬畨鍗撴父鎴-鐩婃櫤浼戦棽 鐗堟湰锛歷1.0.0 澶у皬锛0KB 璇█锛氫腑鏂 骞冲彴锛氬畨鍗揂PK 鎺ㄨ崘鏄熺骇锛堣瘎鍒嗭級锛氣槄鈽呪槄 娓告垙鏍囩: 娑堥櫎鎵嬫父 姘磋姳娑堟秷涔 姘磋姳娑堟秷涔愶紝缁忓吀鏂板鐨勯棷鍏虫墜娓哥帺娉曪紝娓告垙鐜╂硶寤剁画缁忓吀娑堥櫎妯″紡锛屾父鎴忎腑鐜╁閫氳繃鍚堝苟涓涓張涓涓浉鍚岀殑...
  • 寮蹇娑堟秷涔绗215鍏虫庝箞鎵嶈兘杩?
    绛旓細寮蹇娑堟秷涔215鍏充笁鏄熼氬叧鏀荤暐 寮蹇冩秷娑堜箰绗215鍏筹紝杩欏叧鏈鍏峰▉鍔涚殑鐗规晥鏄瓟鍔涢笩+榄斿姏楦燂紝鍙槸涓嶅鏄撻亣鍒般1銆佷换鍔$洰鏍囨槦绾у垎鏁帮細娑堥櫎16涓啺鍧椼佹鏁颁笉瓒呰繃32 涓鏄熷垎鏁 15000 浜屾槦鍒嗘暟 25000 涓夋槦鍒嗘暟 40000 鍥涙槦鍒嗘暟 1200000 2銆侀毦搴﹀垎鏋愶細锛1锛夊彸渚т腑鍑虹幇澶ч噺鐨勯洩鍧楋紝杩欎簺闆潡浼氶樆姝㈡垜浠...
  • 寮蹇娑堟秷涔465鍏虫敾鐣 寮蹇冩秷娑堜箰465鍏虫庝箞杩囨妧宸ц瑙
    绛旓細寤鸿浣犺繖鏍疯瘯璇曠湅锛/iknow-pic.cdn.bcebos.com/b3fb43166d224f4a66bfa1ca05f790529922d1c1"target="_blank"title="鐐瑰嚮鏌ョ湅澶у浘"class="ikqb_img_alink">/iknow-pic.cdn.bcebos.com/b3fb43166d224f4a66bfa1ca05f790529922d1c1?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_600%2Ch_800%2C...
  • 扩展阅读:简单的少儿编程小游戏 ... c#窗体简单小游戏 ... c++入门程序代码 ... c#编写最简单的小游戏 ... c#控制台简单小游戏 ... c#主要做什么 ... c#简单小游戏大全 ... java编程入门 ... c#入门基础知识 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网