首页 分享 卡片消除游戏 java版(代码+讲解)

卡片消除游戏 java版(代码+讲解)

来源:花匠小妙招 时间:2025-04-04 17:02

       最开始一出的时候就准备写了,被别的事情耽误了。花了两天时间,把某个游戏的基本的功能都写出来了,还是挺简单的。简单来说就是个卡片消除游戏,代码方面挺简单,比代码难的是地图的制作(卡片的放置)。完整代码在最下面,需要的自取。(300来行代码,非常简单)(本来想直接用原名字,居然还有版权问题,好离谱呀)

目录

游戏展示

代码讲解

完整代码

游戏展示

代码讲解

就选重要的讲一下吧

先创建一个card类,来存储我们卡片的x,y和卡片的种类。

public class Card {

int x;

int y;

int kind;

public Card(int x,int y){

this.x = x;

this.y = y;

}

}

new两个vector,分别存储没有被点击过的card和点击过的card。

Vector<Card> cards = new Vector<>();

Vector<Card> cardsUse = new Vector<>();

然后向cards添加卡片。

Card card;

for (int i = 0; i < 3; i++) {

for (int j = 0; j < 3; j++) {

card = new Card(SIZE * i * 2 + SIZE + OFFSET_X, SIZE * j * 2 + SIZE / 2 + OFFSET_Y);

cards.add(card);

card = new Card(SIZE * i * 2 + SIZE + OFFSET_X, SIZE * j * 2 + SIZE + OFFSET_Y);

cards.add(card);

}

}

这时的图片种类都是0,增加图片的种类。

for (int i = 0; i < cards.size(); i++) {

cards.get(i).kind = i / 6;

}

然后随机打乱图片(这个随机方法后面可以作为道具使用)。

public void change() {

for (int i = 0; i < cards.size(); i++) {

Random random1 = new Random();

int r = random1.nextInt(cards.size());

int t = cards.get(i).kind;

cards.get(i).kind = cards.get(r).kind;

cards.get(r).kind = t;

}

}

将上面的代码放到setCards1()方法中,作为第一关的图片放置方法。

再写个setCards2()方法,作为第二关的放置方法(按自己的想法随便写就行)。

判断图片是否能被点击,点击后判断光标位置,看在哪张图片上,并看这张图片是否在最上面,只有最上面的才能被点击。具体方法是,判断这张图片是否与其后面的图片重叠,如果重叠,则说明不在最上面。

for (int i = 0; i < view11.cards.size(); i++) {

if (x > view11.cards.get(i).x && x < view11.cards.get(i).x + view11.SIZE

&& y > view11.cards.get(i).y && y < view11.cards.get(i).y + view11.SIZE) {

boolean isC = true;

for (int j = i + 1; j < view11.cards.size(); j++) {

if (Math.abs(view11.cards.get(i).x - view11.cards.get(j).x) < view11.SIZE

&& Math.abs(view11.cards.get(i).y - view11.cards.get(j).y) < view11.SIZE) {

isC = false;

break;

}

}

 如果图片在最上面,并且被点击过的图片总数少于7个,才能被点击。

如果点击的照片里面有三个一样的,就消除。

如果图片全点完,则进入下一关。

具体代码看完整代码

完整代码

Card类

package game03;

public class Card {

int x;

int y;

int kind;

public Card(int x,int y){

this.x = x;

this.y = y;

}

}

View类

package game03;

import javax.swing.*;

import java.awt.*;

import java.util.Random;

import java.util.Vector;

public class View extends JFrame {

Handle handle11 = new Handle(this);

Vector<Card> cards = new Vector<>();

Vector<Card> cardsUse = new Vector<>();

final int OFFSET_X = 150;

final int OFFSET_Y = 20;

final int SIZE = 100;

int level = 1;

public class MPanel11 extends JPanel {

ImageIcon[] p = new ImageIcon[9];

ImageIcon bj = new ImageIcon("srcgame03picbj.jpg");

public MPanel11() {

addMouseListener(handle11);

p[0] = new ImageIcon("srcgame03picp1.png");

p[1] = new ImageIcon("srcgame03picp2.png");

p[2] = new ImageIcon("srcgame03picp3.png");

p[3] = new ImageIcon("srcgame03picp4.png");

p[4] = new ImageIcon("srcgame03picp5.png");

p[5] = new ImageIcon("srcgame03picp6.png");

p[6] = new ImageIcon("srcgame03picp7.png");

p[7] = new ImageIcon("srcgame03picp8.png");

p[8] = new ImageIcon("srcgame03picp9.png");

setCards1();

}

@Override

public void paint(Graphics g) {

super.paint(g);

bj.paintIcon(this,g,0,0);

for (Card card : cards) {

p[card.kind].paintIcon(this, g, card.x, card.y);

}

for (int i = 0; i < cardsUse.size(); i++) {

cardsUse.get(i).y = 650;

cardsUse.get(i).x = OFFSET_X + SIZE * i;

p[cardsUse.get(i).kind].paintIcon(this, g, cardsUse.get(i).x, cardsUse.get(i).y);

}

g.drawRect(OFFSET_X, 650, 700, 100);

}

}

public void change() {

for (int i = 0; i < cards.size(); i++) {

Random random1 = new Random();

int r = random1.nextInt(cards.size());

int t = cards.get(i).kind;

cards.get(i).kind = cards.get(r).kind;

cards.get(r).kind = t;

}

}

public void setCards1() {

level = 1;

Card card;

for (int i = 0; i < 3; i++) {

for (int j = 0; j < 3; j++) {

card = new Card(SIZE * i * 2 + SIZE + OFFSET_X, SIZE * j * 2 + SIZE / 2 + OFFSET_Y);

cards.add(card);

card = new Card(SIZE * i * 2 + SIZE + OFFSET_X, SIZE * j * 2 + SIZE + OFFSET_Y);

cards.add(card);

}

}

for (int i = 0; i < cards.size(); i++) {

cards.get(i).kind = i / 6;

}

change();

}

public void setCards2(){

level = 2;

for(int i=2;i<=4;i++){

for(int j=1;j<=4;j++){

addCard(i,j);

}

}

for(int i=2;i<4;i++){

for(int j=1;j<4;j++){

addCard(i+0.5,j+0.5);

}

}

for(int i=0;i<7;i++){

for(int j=0;j<2;j++){

addCard(i,j);

addCard(i,j+0.5);

}

}

for(int i=0;i<7;i++){

addCard(i,0);

}

for(int i=0;i<6;i++){

addCard(i+0.5,0.5);

}

for(int j=5;j>=3;j--){

addCard(0,j);

addCard(0,j-0.5);

addCard(6,j);

addCard(6,j-0.5);

}

for(int i=2;i<5;i++){

addCard(i,5);

}

addCard(1,3.5);

addCard(5,3.5);

addCard(1.5,3);

addCard(1.5,4);

addCard(4.5,3);

addCard(4.5,4);

for(int i=1;i<=5;i++){

addCard(i,2);

addCard(i,3);

}

for (int i = 0; i < cards.size(); i++) {

cards.get(i).kind = i/15;

}

change();

}

public void addCard(double x,double y){

Card card = new Card((int)(OFFSET_X+x*100),(int)(OFFSET_Y+y*100));

cards.add(card);

}

MPanel11 jp = new MPanel11();

public View() {

super("逗逗");

add(jp);

addKeyListener(handle11);

setSize(1005, 800);

setLocationRelativeTo(null);

setResizable(false);

setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

setVisible(true);

}

public static void main(String[] args) {

new View();

}

}

Handle类

package game03;

import java.awt.event.*;

public class Handle extends KeyAdapter implements MouseListener {

View view11;

public Handle(View view11) {

this.view11 = view11;

}

@Override

public void keyPressed(KeyEvent e) {

super.keyPressed(e);

if(e.getKeyCode()==KeyEvent.VK_SPACE){

view11.change();

view11.repaint();

}

}

@Override

public void mouseClicked(MouseEvent e) {

}

@Override

public void mousePressed(MouseEvent e) {

int x = e.getX();

int y = e.getY();

for (int i = 0; i < view11.cards.size(); i++) {

if (x > view11.cards.get(i).x && x < view11.cards.get(i).x + view11.SIZE

&& y > view11.cards.get(i).y && y < view11.cards.get(i).y + view11.SIZE) {

boolean isC = true;

for (int j = i + 1; j < view11.cards.size(); j++) {

if (Math.abs(view11.cards.get(i).x - view11.cards.get(j).x) < view11.SIZE

&& Math.abs(view11.cards.get(i).y - view11.cards.get(j).y) < view11.SIZE) {

isC = false;

break;

}

}

if (isC) {

if (view11.cardsUse.size() < 7) {

boolean h = false;

for (int k = 0; k < view11.cardsUse.size(); k++) {

if (view11.cardsUse.get(k).kind == view11.cards.get(i).kind) {

view11.cardsUse.add(k, view11.cards.get(i));

h = true;

break;

}

}

if (!h) {

view11.cardsUse.add(view11.cards.get(i));

}

view11.cards.remove(view11.cards.get(i));

if (view11.cardsUse.size() >= 3) {

for (int k = 0; k < view11.cardsUse.size() - 2; k++) {

if (view11.cardsUse.get(k).kind == view11.cardsUse.get(k + 1).kind

&& view11.cardsUse.get(k + 1).kind == view11.cardsUse.get(k + 2).kind) {

view11.cardsUse.remove(view11.cardsUse.get(k));

view11.cardsUse.remove(view11.cardsUse.get(k));

view11.cardsUse.remove(view11.cardsUse.get(k));

}

}

}

} else {

System.out.println("GAME OVER!!!");

}

}

}

}

if(view11.cards.size()==0){

if(view11.level==2){

System.out.println("WIN!!!");

}else {

view11.setCards2();

}

}

view11.repaint();

}

@Override

public void mouseReleased(MouseEvent e) {

}

@Override

public void mouseEntered(MouseEvent e) {

}

@Override

public void mouseExited(MouseEvent e) {

}

}

相关知识

卡片消除游戏 java版(代码+讲解)
JAVA表白浪漫烟花效果代码
怎么用java代码生成玫瑰花
Java Swing玫瑰花代码 vbs玫瑰花表白代码
我java写出动态玫瑰的代码
python玫瑰花代码讲解
Java的代码书写规范
消除游戏大全
花儿爱消除游戏下载
Java并发编程的艺术

网址: 卡片消除游戏 java版(代码+讲解) https://www.huajiangbk.com/newsview1752966.html

所属分类:花卉
上一篇: 使用unity3d做一个六角消除
下一篇: HTML5 Canvas消除游戏

推荐分享