Java 俄罗斯方块

 

游戏规则

由小方块组成的不同形状的板块陆续从屏幕上方落下来,玩家通过调整板块的位置和方向,使它们在屏幕底部拼出完整的一条或几条。这些完整的横条会随即消失,给新落下来的板块腾出空间,与此同时,玩家得到分数奖励。没有被消除掉的方块不断堆积起来,一旦堆到屏幕顶端,玩家便告输,游戏结束。

 

整体代码分为三个模块:方格模块,七种图形模块,俄罗斯方块主模块。

 

 

小方块类:Cell

package com.zhao.demo.block;

 

import java.awt.image.BufferedImage;

import java.util.Objects;

 

/**

 * @author xiaoZhao

 * @date 2022/5/7

 * @describe

 * 小方块类

 * 方法: 左移、右移、下落

 */

public class Cell {

    // 行

    private int row;

    // 列

    private int col;

    private BufferedImage image;

 

    public Cell() {

    }

 

    public Cell(int row, int col, BufferedImage image) {

        this.row = row;

        this.col = col;

        this.image = image;

    }

 

    public int getRow() {

        return row;

    }

 

    public void setRow(int row) {

        this.row = row;

    }

 

    public int getCol() {

        return col;

    }

 

    public void setCol(int col) {

        this.col = col;

    }

 

    public BufferedImage getImage() {

        return image;

    }

 

    public void setImage(BufferedImage image) {

        this.image = image;

    }

 

    @Override

    public String toString() {

        return "Cell{" +

                "row=" + row +

                ", col=" + col +

                ", image=" + image +

                '}';

    }

 

    @Override

    public boolean equals(Object o) {

        if (this == o) {

            return true;

        }

 

        if (!(o instanceof Cell)) {

            return false;

        }

        Cell cell = (Cell) o;

        return getRow() == cell.getRow() &&

                getCol() == cell.getCol() &&

                Objects.equals(getImage(), cell.getImage());

    }

 

    @Override

    public int hashCode() {

        return Objects.hash(getRow(), getCol(), getImage());

    }

 

    //左移动一格

    public void left(){

        col--;

    }

 

    //右移动一格

    public void right(){

        col++;

    }

 

    //下移动一格

    public void down(){

        row++;

    }

}

 七种图形类:I、J、L、O、S、T、Z

I

 

package com.zhao.demo.shape;

 

import com.zhao.demo.App.Tetris;

import com.zhao.demo.block.Cell;

import com.zhao.demo.block.Tetromino;

 

/**

 * @author xiaoZhao

 * @date 2022/5/11

 * @describe

 */

public class I extends Tetromino {

 

    public I() {

        cells[0] = new Cell(0,4, Tetris.I);

        cells[1] = new Cell(0,3, Tetris.I);

        cells[2] = new Cell(0,5, Tetris.I);

        cells[3] = new Cell(0,6, Tetris.I);

 

        //共有两种旋转状态

        states =new State[2];

        //初始化两种状态的相对坐标

        states[0]=new State(0,0,0,-1,0,1,0,2);

        states[1]=new State(0,0,-1,0,1,0,2,0);

    }

 

}

 J

package com.zhao.demo.shape;

 

import com.zhao.demo.App.Tetris;

import com.zhao.demo.block.Cell;

import com.zhao.demo.block.Tetromino;

 

/**

 * @author xiaoZhao

 * @date 2022/5/11

 * @describe

 */

public class J extends Tetromino {

    public J() {

        cells[0] = new Cell(0,4, Tetris.J);

        cells[1] = new Cell(0,3, Tetris.J);

        cells[2] = new Cell(0,5, Tetris.J);

        cells[3] = new Cell(1,5, Tetris.J);

 

        states=new State[4];

        states[0]=new State(0,0,0,-1,0,1,1,1);

        states[1]=new State(0,0,-1,0,1,0,1,-1);

        states[2]=new State(0,0,0,1,0,-1,-1,-1);

        states[3]=new State(0,0,1,0,-1,0,-1,1);

    }

}

 L

package com.zhao.demo.shape;

 

import com.zhao.demo.App.Tetris;

import com.zhao.demo.block.Cell;

import com.zhao.demo.block.Tetromino;

 

/**

 * @author xiaoZhao

 * @date 2022/5/11

 * @describe

 */

public class L extends Tetromino {

    public L() {

        cells[0] = new Cell(0,4, Tetris.L);

        cells[1] = new Cell(0,3, Tetris.L);

        cells[2] = new Cell(0,5, Tetris.L);

        cells[3] = new Cell(1,3, Tetris.L);

 

        states=new State[4];

        states[0]=new State(0,0,0,-1,0,1,1,-1);

        states[1]=new State(0,0,-1,0,1,0,-1,-1);

        states[2]=new State(0,0,0,1,0,-1,-1,1);

        states[3]=new State(0,0,1,0,-1,0,1,1);

    }

}

 O

package com.zhao.demo.shape;

 

import com.zhao.demo.App.Tetris;

import com.zhao.demo.block.Cell;

import com.zhao.demo.block.Tetromino;

 

/**

 * @author xiaoZhao

 * @date 2022/5/11

 * @describe

 */

public class O extends Tetromino {

    public O() {

        cells[0] = new Cell(0, 4, Tetris.O);

        cells[1] = new Cell(0, 5, Tetris.O);

        cells[2] = new Cell(1, 4, Tetris.O);

        cells[3] = new Cell(1, 5, Tetris.O);

 

        //无旋转状态

        states = new State[0];

    }

}

 S

package com.zhao.demo.shape;

 

import com.zhao.demo.App.Tetris;

import com.zhao.demo.block.Cell;

import com.zhao.demo.block.Tetromino;

 

/**

 * @author xiaoZhao

 * @date 2022/5/11

 * @describe

 */

public class S extends Tetromino {

    public S() {

        cells[0] = new Cell(0,4, Tetris.S);

        cells[1] = new Cell(0,5, Tetris.S);

        cells[2] = new Cell(1,3, Tetris.S);

        cells[3] = new Cell(1,4, Tetris.S);

 

        //共有两种旋转状态

        states =new State[2];

        //初始化两种状态的相对坐标

        states[0]=new State(0,0,0,1,1,-1,1,0);

        states[1]=new State(0,0,1,0,-1,-1,0,-1);

    }

}

 T

package com.zhao.demo.shape;

 

import com.zha

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/209386.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何恢复已删除的 JPG/JPEG 文件的方法深度解析!

您是否意外丢失或删除了 JPG 或 JPEG 照片?幸运的是,您可以使用照片恢复工具将它们恢复。立即获取适用于 PC 的 JPEG 恢复工具 - 照片恢复: 照片是捕捉和重温生活中特殊时刻的最佳方式。因此,当我们由于硬盘崩溃、意外格式化磁盘…

linux Ubuntu下,第一个C++程序访问数据库,遇到的问题,及解决办法

在ubuntu下安装了mysql&#xff0c;mysql以后&#xff0c;编写了第一个访问数据库的程序&#xff1a; #include <iostream> #include <string> #include <cstdlib> //for system #include <mysql.h>using namespace std;int main() {mysqlpp::Connect…

《算法通关村——透析跳跃游戏》

《算法通关村——透析跳跃游戏》 55. 跳跃游戏 给你一个非负整数数组 nums &#xff0c;你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标&#xff0c;如果可以&#xff0c;返回 true &#xff1b;否则&a…

uniapp中使用u-loadmore,loadText内容不随status改变刷新

uniapp中使用u-loadmore&#xff0c;使用情况比较复杂&#xff0c;出现loadText内容不随status改变刷新的情况&#xff0c;即当status"loading"时&#xff0c;显示的内容是loadmore或nomore的文字。 解决办法&#xff1a;添加key参数 <u-loadmore :status"…

[ROS2] --- param

1 param介绍 类似C编程中的全局变量&#xff0c;可以便于在多个程序中共享某些数据&#xff0c;参数是ROS机器人系统中的全局字典&#xff0c;可以运行多个节点中共享数据。 全局字典 在ROS系统中&#xff0c;参数是以全局字典的形态存在的&#xff0c;什么叫字典&#xff1f;…

keepalived+lvs 对nginx做负载均衡和高可用

LVS_Director KeepAlivedKeepAlived在该项目中的功能&#xff1a; 1. 管理IPVS的路由表&#xff08;包括对RealServer做健康检查&#xff09; 2. 实现调度器的HA http://www.keepalived.orgKeepalived所执行的外部脚本命令建议使用绝对路径实施步骤&#xff1a; 1. 主/备调度器…

深度解析IP应用场景API:提升风险控制与反欺诈能力

前言 在当今数字化时代&#xff0c;网络安全和用户数据保护成为企业日益关注的焦点。IP应用场景API作为一种强大的工具&#xff0c;不仅能够在线调用接口获取IP场景属性&#xff0c;而且具备识别IP真人度的能力&#xff0c;为企业提供了卓越的风险控制和反欺诈业务能力。本文将…

Java数据结构06——树

1.why: 数组&链表&树 2. 大纲 2.1前中后序 public class HeroNode {private int no;private String name;private HeroNode left;//默认为nullprivate HeroNode right;//默认为nullpublic HeroNode(int no, String name) {this.no no;this.name name;}public int …

Ubuntu编译文件安装SNMP服务

net-snmp源码下载 http://www.net-snmp.org/download.html 编译步骤 指定参数编译 ./configure --prefix/root/snmpd --with-default-snmp-version"2" --with-logfile"/var/log/snmpd.log" --with-persistent-directory"/var/net-snmp" --wi…

MinIO集群模式信息泄露漏洞(CVE-2023-28432)

前言&#xff1a;MinIO是一个用Golang开发的基于Apache License v2.0开源协议的对象存储服务。虽然轻量&#xff0c;却拥有着不错的性能。它兼容亚马逊S3云存储服务接口&#xff0c;非常适合于存储大容量非结构化的数据。该漏洞会在前台泄露用户的账户和密码。 0x00 环境配置 …

html、css类名命名思路整理

开发页面时&#xff0c;老是遇到起名问题&#xff0c;越想越头疼&#xff0c;严重影响开发进度&#xff0c;都是在想名字&#xff0c;现在做一下梳理&#xff0c;统一一下思想&#xff0c;希望以后能减少这块的痛苦。 命名规则 [功能名称]__[组成部分名称]--[样式名称] 思路…

MySQL生产环境_使用SQL中的ROW_NUMBER()函数查找每个ID的最新记录

生产需求 应生产环境要求&#xff0c;需要获取到每个id的最新位置及其他GL属性 ROW_NUMBER函数 ROW_NUMBER()函数是一种窗口函数&#xff0c;可以根据指定的列对结果集中的行进行编号。通过结合PARTITION BY子句和ORDER BY子句&#xff0c;ROW_NUMBER()函数能够对数据进行分组…

空间运算设备-Apple Vision Pro

苹果以其在科技领域的创新而闻名&#xff0c;他们致力于推动技术的边界&#xff0c;这在他们的产品中表现得非常明显。他们尝试开发一项的新型突破性显示技术。在 2023 年 6 月 5 日官网宣布将发布 Apple Vision Pro 头戴空间设备&#xff0c;我们一起来了解一下 Apple Vision …

SVPWM原理及simulink

关注微♥“电击小子程高兴的MATLAB小屋”获得专属优惠 一.SVPWM原理 SPWM常用于变频调速控制系统&#xff0c;经典的SPWM控制主要目的是使变频器的输出电压尽量接近正弦波&#xff0c;并未关注输出的电流波形。而矢量控制的最终目的是得到圆形的旋转磁场&#xff0c;这样就要求…

【面试常考题目】五种方法解决“如何在n个无序数组中找出它的中位数(java)”问题

1.3 从N个数组中找到中位数&#xff0c;每一个数组可能乱序 在LeetCode上&#xff0c;"寻找多个数组的中位数"这类问题通常是由两个数组合并中位数问题&#xff08;即LeetCode第4题&#xff09;的变种或扩展。直接对应于多个数组合并后寻找中位数的题目在LeetCode上…

BeyondCompare-过期-mac电脑

在/Applications/Beyond Compare.app/Contents/MacOS/目录下的BCompare程序是BeyondCompare的可执行文件。 在 /Users/username/Library/Application Support/Beyond Compare/目录下的registry.dat文件是存储程序注册信息的。包括刚开始使用的时间。 想要无限的使用BeyondCompa…

根据图片生成前端代码:GPT vesion 助你释放效能 | 开源日报 No.98

php/php-src Stars: 36.4k License: NOASSERTION PHP 是一种流行的通用脚本语言&#xff0c;特别适合 Web 开发。快速、灵活和实用&#xff0c;PHP 支持从博客到世界上最受欢迎的网站等各种应用。PHP 遵循 PHP 许可证 v3.01 发布。 主要功能&#xff1a; 提供强大而灵活的脚…

代码随想录算法训练营 ---第五十六天

今天同样是 动态规划&#xff1a;编辑距离问题&#xff01; 第一题&#xff1a; 简介&#xff1a; 本题有两个思路&#xff1a; 1.求出最长公共子串&#xff0c;然后返还 word1.length()word2.length()-2*dp[word1.size()][word2.size()] 本思路解法与求最长公共子串相同&…

Mybatis XML改查操作(结合上文)

"改"操作 先在UserInfoXMLMapper.xml 中 : <?xml version"1.0" encoding"UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><map…

无向图的邻接表

在无向图中&#xff0c;边是双向的&#xff0c;因此构建邻接表时需要考虑两个方向。下面是一个简单的 JavaScript 代码示例&#xff0c;用于构建无向图的邻接表&#xff1a; // 示例数据 const links [{ source: 1, target: 0 },{ source: 2, target: 0 },// ... 其他链接 ];…