📄 model.java
字号:
setChanged();
notifyObservers("music");
}
/**
* 点击声音开关
*/
public void clickSound(){
notifyClickSound();
}
/**
* 通知系统点击了音乐开关
*/
private void notifyClickSound() {
setChanged();
notifyObservers("sound");
}
/**
* 演示
*/
public void demo(){
notifyDemo();
}
/**
* 通知系统进行演示
*/
public void notifyDemo(){
setChanged();
notifyObservers("dem");
}
/**
* 单击提示按钮时所引发的事件
*/
public void remind() {
count++;
notifyRemind();
/*如果还有提示机会则显示提示*/
if (count <=6) {
showTip();
}
}
/**
* 假如要提示则自动调用Observer的update()方法,传参"remind"
*/
private void notifyRemind() {
setChanged();
notifyObservers("remind");
}
/**
* 暂停事件
*/
public void pause(){
pauseTime=System.currentTimeMillis();
notifyPause();
}
/**
* 通知系统发生了暂停事件
*/
private void notifyPause(){
setChanged();
notifyObservers("pause");
}
/**
* 退出游戏
*/
public void quit() {
if (frameLocation == null) {
Point p = new Point(220, 70);
setFrameLocation(p);
}
saveSet();
// 探出JOptionPane以供用户确认
int response = JOptionPane.showConfirmDialog(null,
"需要保存吗?\n保存将会覆盖上次保存的内容!", " 友情提示",
JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE);
if (response == JOptionPane.YES_OPTION) {
saveGameData();
}
System.exit(0);
}
/**
* 保存游戏的数据
*/
public void saveGameData() {
// 由此来判断是否要进行保存
if (level != 1) {
LoadAndSave.saveGameData(pictureFile, musicFile, level);
}
}
/**
* @return frameLocation 得到窗体的位置
*/
public Point getLocation() {
return frameLocation;
}
/**
* 保存窗体退出时候的位置信息,文件不为空的时候进行加载
*/
public void saveSet() {
if (frameLocation != null) {
LoadAndSave.saveLocation(frameLocation);
}
}
/**
* 设置窗体的位置,通过结束时给它传递一个位置点的参数
*
* @param location
* 点的位置
*/
public void setFrameLocation(Point location) {
frameLocation = location;
}
private void level1(){
}
private void level2(Point p1, Point p2) {
/**
//temp 作为中间参数来用来使p1.x 和 p2.x交换值
int temp;
//保证p1处于上方
if (p1.x>p2.x){
temp=p1.x;
p1.x=p2.x;
p2.x=temp;
}
*/
for(int i=p1.x;i>=1;i--){
if(data[i-1][p1.y]!=0&&(i!=1))
data[i][p1.y]=data[i-1][p1.y];
else if(data[i-1][p1.y]==0||(i==1))
{
data[1][p1.y]=0;
data[i][p1.y]=0;
break;
}
}
for(int j=p2.x;j>=1;j--){
if(data[j-1][p2.y]!=0&&(j!=1))
data[j][p2.y]=data[j-1][p2.y];
else if(data[j-1][p2.y]==0||(j==1))
{
data[1][p2.y]=0;
data[j][p2.y]=0;
break;
}
}
updateAll();
}
private void level3(Point p1,Point p2){
if((p1.x<=5&&p2.x<=5)||(p1.x>=6&&p2.x>=6)){
//temp 作为中间参数来用来使p1.x 和 p2.x交换值
int temp;
//保证p1处于上方
if (p1.x>p2.x){
temp=p1.x;
p1.x=p2.x;
p2.x=temp;
}
}
if(p1.x<=5){
for(int i=4;i>=p1.x;i--){
if(p1.x!=5)
{
data[i][p1.y]=data[i+1][p1.y];
data[5][p1.y]=0;}
else if(p1.x==5)
{
data[5][p1.y]=0;
break;
}
}
}
else if(p1.x>=6){
for(int i=p1.x;i<=10;i--){
if(data[i-1][p1.y]!=0&&(i!=6)){
data[i][p1.y]=data[i-1][p1.y];}
else if(data[i-1][p1.y]==0||(i==6))
{
data[6][p1.y]=0;
data[i][p1.y]=0;
break;
}
}
}
if(p2.x<=5){
for(int i=4;i>=p2.x;i--){
if(p2.x!=5){
data[i][p2.y]=data[i+1][p2.y];
data[5][p2.y]=0;
}
else if(p2.x==5)
{
data[5][p2.y]=0;
break;
}
}
}
else if(p2.x>=6){
for(int i=p2.x;i<=10;i--){
if(data[i-1][p2.y]!=0&&(i!=6))
data[i][p2.y]=data[i-1][p2.y];
else if(data[i-1][p2.y]==0||(i==6))
{
data[6][p2.y]=0;
data[i][p2.y]=0;
break;
}
}
}
updateAll();
}
private void level4(Point p1,Point p2){
for(int i=p1.y;i>=1;i--){
if(data[p1.x][i-1]!=0)
data[p1.x][i]=data[p1.x][i-1];
else if(data[p1.x][i-1]==0||(i==1))
{
data[p1.x][1]=0;
data[p1.x][i]=0;
break;
}
}
for(int j=p2.y;j>=1;j--){
if(data[p2.x][j-1]!=0)
data[p2.x][j]=data[p2.x][j-1];
else if(data[p2.x][j-1]==0||(j==1))
{
data[p2.x][1]=0;
data[p2.x][j]=0;
break;
}
}
}
private void level5(Point p1,Point p2){
if(p1.y<=6){
for(int i=p1.y;i<=6;i++){
if(data[p1.x][i+1]!=0)
data[p1.x][i]=data[p1.x][i+1];
else if(data[p1.x][i+1]==0||(i==6))
{
data[p1.x][6]=0;
data[p1.x][i]=0;
break;
}
}
}
else if(p1.y>=6){
for(int i=p1.y;i>=1;i--){
if(data[p1.x][i-1]!=0)
data[p1.x][i]=data[p1.x][i-1];
else if(data[p1.x][i-1]==0||(i==6))
{
data[p1.x][6]=0;
data[p1.x][1]=0;
break;
}
}
}
if(p2.y<=6){
for(int i=p2.y;i<=5;i++){
if(data[p2.x][i+1]!=0)
data[p2.x][i]=data[p2.x][i+1];
else if(data[p2.x][i+1]==0||(i==6))
{
data[p2.x][6]=0;
data[p2.x][i]=0;
break;
}
}
}
else if(p2.y>=6){
for(int i=p2.y;i>=1;i--){
if(data[p2.x][i-1]!=0)
data[p2.x][i]=data[p2.x][i-1];
else if(data[p2.x][i-1]==0||(i==6))
{
data[p2.x][6]=0;
data[p2.x][i]=0;
break;
}
}
}
}
/**
* 游戏第一关,正常连就行
*/
private void levelOne() {
}
/**
* 游戏第二关,有下坠效果
*
* @param Point,Point
* p1, p2前后所点的两个点
*/
private void levelTwo(Point p1, Point p2) {
int boundary = 0;
int count = 1;
// 判断是否是在同列
if (p1.y == p2.y) {
// 如果是在同列,两个图片的高低,以判断谁在下面,进而据此使剩余的图片产生下坠效果
if (p2.x < p1.x) {
for (int i = p1.x; i > 1; i--) {
while ((i - count - boundary) > 0
&& (data[i - count - boundary][p1.y] == 0)) {// 执行条件是==0的情况
boundary++;
}
data[i][p1.y] = data[i - count - boundary][p1.y];
data[i - count - boundary][p1.y] = 0;
boundary = 0;
}
}
if (p2.x > p1.x) {
for (int i = p2.x; i > 1; i--) {
while ((i - count - boundary) > 0
&& (data[i - count - boundary][p2.y] == 0)) {// 执行条件是==0的情况
boundary++;
}
data[i][p2.y] = data[i - count - boundary][p2.y];
data[i - count - boundary][p2.y] = 0;
boundary = 0;
}
}
}
// 如果不在同一列,那就不用判断了,直接使所在列产生下坠效果
else {
for (int i = p1.x; i > 1; i--) {
while ((i - count - boundary) > 0
&& (data[i - count - boundary][p1.y] == 0)) {// 执行条件是==0的情况
boundary++;
}
data[i][p1.y] = data[i - count - boundary][p1.y];
data[i - count - boundary][p1.y] = 0;
boundary = 0;
}
for (int i = p2.x; i > 1; i--) {
while ((i - count - boundary) > 0
&& (data[i - count - boundary][p2.y] == 0)) {// 执行条件是==0的情况
boundary++;
}
data[i][p2.y] = data[i - count - boundary][p2.y];
data[i - count - boundary][p2.y] = 0;
boundary = 0;
}
}
updateAll();
}
/**
* 游戏第三关,有左移的效果
*
* @param Point,Point
* p1, p2前后所点的两个点
*/
private void levelThree(Point p1, Point p2) {
int boundary = 0;
int count = 1;
// 判断是否是在同行
if (p1.x == p2.x) {
// 如果是在同行,两个图片的左右,以判断谁在左面,进而据此使剩余的图片产生左移效果
if (p2.y < p1.y) {
for (int i = p2.y; i < 14; i++) {
while ((i + count + boundary) < 15
&& (data[p2.x][i + count + boundary] == 0)) {// 执行条件是==0的情况
boundary++;
}
data[p2.x][i] = data[p2.x][i + count + boundary];
data[p2.x][i + count + boundary] = 0;
boundary = 0;
}
}
if (p2.y > p1.y) {
for (int i = p1.y; i < 14; i++) {
while ((i + count + boundary) < 15
&& (data[p2.x][i + count + boundary] == 0)) {// 执行条件是==0的情况
boundary++;
}
data[p2.x][i] = data[p2.x][i + count + boundary];
data[p2.x][i + count + boundary] = 0;
boundary = 0;
}
}
}
// 如果不在同一行,那就不用判断了,直接使所在行产生左移效果
else {
for (int i = p2.y; i < 14; i++) {
while ((i + count + boundary) < 15
&& (data[p2.x][i + count + boundary] == 0)) {// 执行条件是==0的情况
boundary++;
}
data[p2.x][i] = data[p2.x][i + count + boundary];
data[p2.x][i + count + boundary] = 0;
boundary = 0;
}
for (int i = p1.y; i < 14; i++) {
while ((i + count + boundary) < 15
&& (data[p1.x][i + count + boundary] == 0)) {// 执行条件是==0的情况
boundary++;
}
data[p1.x][i] = data[p1.x][i + count + boundary];
data[p1.x][i + count + boundary] = 0;
boundary = 0;
}
}
updateAll();
}
/**
* 游戏第四关,有从中间向上下分离的效果
*
* @param Point,Point
* p1, p2前后所点的两个点
*/
private void levelFour(Point p1, Point p2) {
int boundary = 0;
int count = 1;
// 对P1所对图片所在的位置进行判断,看是在后5行还是在前5行,据此判断应该上移还是应该下移
if (p1.x > 5) {
for (int i = p1.x; i > 6; i--) {
while ((i - count - boundary) > 5
&& (data[i - count - boundary][p1.y] == 0)) {// 执行条件是==0的情况
boundary++;
}
if (i - count - boundary != 5) {
data[i][p1.y] = data[i - count - boundary][p1.y];
data[i - count - boundary][p1.y] = 0;
}
boundary = 0;
}
} else if (p1.x <= 5) {
for (int i = p1.x; i < 5; i++) {
while ((i + count + boundary) <= 5
&& (data[i + count + boundary][p1.y] == 0)) {// 执行条件是==0的情况
boundary++;
}
if (i + count + boundary != 6) {
data[i][p1.y] = data[i + count + boundary][p1.y];
data[i + count + boundary][p1.y] = 0;
}
boundary = 0;
}
}
// 对P2所对图片所在的位置进行判断,看是在后5行还是在前5行,据此判断应该上移还是应该下移
if (p2.x > 5) {
for (int i = p2.x; i > 6; i--) {
while ((i - count - boundary) > 5
&& (data[i - count - boundary][p2.y] == 0)) {// 执行条件是==0的情况
boundary++;
}
if (i - count - boundary != 5) {
data[i][p2.y] = data[i - count - boundary][p2.y];
data[i - count - boundary][p2.y] = 0;
}
boundary = 0;
}
} else if (p2.x <= 5) {
for (int i = p2.x; i < 5; i++) {
while ((i + count + boundary) <= 5
&& (data[i + count + boundary][p2.y] == 0)) {// 执行条件是==0的情况
boundary++;
}
if (i + count + boundary != 6) {
data[i][p2.y] = data[i + count + boundary][p2.y];
data[i + count + boundary][p2.y] = 0;
}
boundary = 0;
}
}
updateAll();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -