Sokoban
Java Source:
/**********************************************************
Sokoban.java - My First Java Game
**********************************************************/
import java.applet.*;
import java.awt.*;
import java.awt.image.*;
import java.net.*;
import java.util.*;
/******** TEST ********/
public class Sokoban extends Applet
{
static int MAX_X=17, MAX_Y=13, MAX_LVL=200, MAX_IMG=8, MAX_HIST=100;
static int X_0 = 5, Y_0 = 5;
private Sokoban main;
private Image mainImg;
private Graphics g;
private TextField txt1;
private Image[] xImg = new Image[MAX_IMG+1];
private int xPos, yPos, gLevel, mvPos;
private byte[][] currCanvas = new byte[MAX_Y+1][MAX_X+1];
private byte[] xMove = new byte[MAX_HIST];
private byte firstTime;
private Button btn1 = new Button("X");
private Button btnN2 = new Button(">>");
private Button btnN = new Button(">");
private Button btnP = new Button("<");
private Button btnP2 = new Button("<<");
private Button btnU = new Button("U");
private static String mCode = " 01234567, :o#@XHB";
private static int xCoord[][] =
{{ 0, 0,20,20}, { 20, 0,20,20}, { 40, 0,20,20},
{ 0,20,20,20}, { 20,20,20,20}, { 40,20,20,20},
{ 0,40,20,20}, { 20,40,20,20}, { 40,40,20,20}};
private static String biDat[] = {
" , , , ###, #o#, #:####, ###H:Ho#, #o:H@###, ####H#, #o#, ###",
" , , #####, #@::#, #:HH# ###, #:H:# #o#, ###:###o#, ##::::o#, #:::#::#, #:::####, #####",
" , , , #######, #:::::###, ##H###:::#, #:@:H::H:#, #:oo#:H:##, ##oo#:::#, ########",
" , , , ####, ##::#, #@H:#, ##H:##, ##:H:#, #oH::#, #ooBo#, ######",
" , , #####, #@:###, #:H::#, ###:#:##, #o#:#::#, #oH::#:#, #o:::H:#, ########",
" , #######, ####:::::#, #:::o###:#, #:#:#::::##, #:#:H:H#o:#, #:#::B::#:#, #:o#H:H:#:#, ##::::#:#:###, #:###o::::@#, #:::::##:::#, ############",
" , , , , #######, ##::#:@#, #:::#::#, #H:H:H:#, #:H##::#, ###:H:#:##, #ooooo::#, #########",
" , , , ######, ###::::#, ##o:H##:##, #ooH:H::@#, #oo:H:H:##, ######::#, ####",
" , , #########, #::##:::#, #:::H:::#, #H:###:H#, #:#ooo#:#, ##:#ooo#:##, #:H::H::H:#, #:::::#:@:#, ###########",
" , , , , ######, #::::#, ###HHH:#, #@:Hoo:#, #:Hooo##, ####::#, ####",
" , , , , #### #####, ##::# #:::#, #:H:####H::#, #::Hoooo:H:#, ##::::#:@:##, ##########",
" , , , #####, ###::@#, #::Ho:##, #::oHo:#, ###:BH:#, #:::##, #####",
" , , , ####, #oo#, ##:o##, #::Ho#, ##:H::##, #::#HH:#, #::@:::#, ########",
" , , , ########, #::#:::#, #:HooH:#, #@HoB:##, #:HooH:#, #::#:::#, ########",
" , , , ######, ##::::##, #:H:HH:#, #oooooo#, #:HH:H:#, ###:@###, ####, , , , ",
" , , ######, #::::###, #:H::::#, ###:H:##:#, #ooo:H:::#, #oooH#H:##, ####:#:H:#, #::@::#, #######, , , ",
" , , , ######, #::::#, #:HHH##, #::#oo###, ##::ooH:#, #:@::::#, ########, , , , ",
" , , , ########, #:::#o:#, ##::Hooo#, #::H:#Bo#, ##:##H#:##, #:::H::H:#, #:::#::::#, #######@:#, ####, , ",
" , , , #######, #oooo:#, ###oooH###, #::H#H:H:#, #:HH::#H:#, #::::#:::#, ####:@:###, #####, , , ",
" , , , #######, #ooHoo#, #oo#oo#, #:HHH:#, #::H::#, #:HHH:#, #::#@:#, #######, , , ",
" , , , ######, #:ooo#, ####oooo#, #::###H:###, #:H:H::HH:#, #@:H:H::::#, #:::###:::#, ##### #####, , , ",
" , , ########, #::::::#, #:#HH::#, #:ooo#:#, ##oooH:##, #:##:H:#, #H::H::#, #::#::@#, ########, , , ",
" , , , #####, ###:::####, #:::H:H::#, #:H:::H:@#, ###HH#####, #::oo#, #oooo#, ######, , , ",
" , , ###### #####, #::::### #::o#, #::H:H:# #ooo#, #:#::H:###::o#, #::HHH:::H:@o#, ###::H::H#::o#, #::H#H:#ooo#, ##:::::#::o#, ###########",
" , , ######, #####o:::#, #::#oo##:#, #::Hoo:::#, #::#:o#:##, ###:##H#::#, #:H::::HH:#, #:#H#::#::#, #@::#######, #####",
" , #########, #:::##::####, #:H::::::::#, ##H###:##::#, #::##:B:#:##, #:Hoooooo:#, ##:###:o:#:#, #:::::H###H#, #:::#::::H@#, #####H#:####, #:::#, #####",
" , #########, #:::::::#, #:#:#:#:#, #::H:H#:#, #######:::H:::#, #oo#::##:H:H#:#, #oo:::##:H:H::#, #oo#::##:######, #oo#:#:H:H:#, #oo:::::H::#, #::###:@:###, #### #####",
" ####,#####::#,#::H:H:# #######,#:::H::# #BoBoB#,##:H:H:###oBoBo#, #H:H::#::BoBoB#, #@H:H::::oBoB##, #H:H::#::BoBoB#,##:H:H:###oBoBo#,#:::H::# #BoBoB#,#::H:H:# #######,#####::#, ####, ",
" , , , ########, #oooooo#, #::H:#:##, #:H:#:H:#, ##H:H:H:#, #::@:::#, ########, , , , ",
" , , , ##########, ###:::o::::#, #:::##H##::#, #:@Ho:o:oH##, ##:H##H##:#, #::::o:::#, ##########, , , , ",
" , , ######, ####o::@#, #::HHH::#, #o##o##o#, #:::H:::#, #::Ho#:##, ####:::#, #####, , , , ",
" , , , ######, #o:oo#, #o:Ho#, ###::H##, #:H::H:#, #:#H##:#, #:::@::#, ########, , , ",
" , ######, ###::::###, #:::#H:::###, #:::H:::HH:#, #:HH:#H::::#, ##:::H:::H:#, ######:#H#####, #oo@:#H::#, #o#oo::H##, #ooooH#:#, #oooo:::#, #########, ",
"###############,#::::::#::::::#,#:H:#H:#:H##H:#,#:#::H:#::::::#,#:::##H#H##HH:#,#:#:#:ooo:#:::#,#:H::o:#:oH:#:#,#:H#@Hooo#:#::#,#::::o:#:o::H:#,#:##oH###Ho:#:#,#:#:Hooooo:##:#,#:::::::::::::#,###############, ",
" , , #########, #:::##::#, #:#:H:H:#, #::Bo#::#, ##:#o@o##, ##H###B###, #::::::::#, #:::##:#:#, ######:::#, #####, , ",
"########,#::::::#,#:HH:::###,#::H:HHH:#####,##:##:ooo::::##, #:#@#ooo###H:#, #:#:Hooo:::::#,##:#:HoooH:#:##,#::#####:###:#,#::::::H:::H:#,###########::#, ####, , ",
" , , , #####, #:@:#, #HHH#, ####:::#, #:::o#H##, #:HoHo:o#, #::#o#o##, ########, , , ",
" ############, #ooo:#:::::#, #oo::#:##::#, #oo:::::#::#, #oo::#:H##:#, #ooo:#H:H::#, ######::HH:#, ##::H:HH::#, #@:HHH::#:#, ##:H:##:::#, #::::::::#, ##########, , ",
" , , #########, #:::::::#, #::H:H:H#, ##:#H##:#, #:oo:oo##, ##oo:oo:#, #:##H#:##, #H:H:H::#, #::::::@#, #########, , ",
"##### ####,#@::########::#,##:H:::::::H::#, #:#:#::####::#, #::H:::####H##, #H:##:#:H:H:#,##:H::H#:::::#,#:::#::::::#:#,#:::#####H####,#####:::#:::#, #ooo::H:#, #oooo#::#, #oooo####, ######",
" , , , #####, #####:::#, #:oo:H#:#, #:#oB:::#, ##:Bo#H:##, #:H::H::#, #:::##:@#, #########, , , ",
" , , ##### #######, #:::###::#::#, #:H:::::H:@:#, ##:#H##o##::#, #::oooBo:H:#, #:H#:#o#:#:#, ##::::H::::#, #::########, ####, , , ",
" ###, ######@##, #oooo#H:##, #oooo#:H:#, #oooo:H::#, #:ooo#:::#,######:#####:##,#:H:H:::H::#::#,#::::HH:::H:H:#,###:H:H:H::####, ##:::H:H:#, #::######, ####, ",
" , #####, ###:::###, ##::@H:H:#, #::##:##:##, #:Ho#oH:::#, #:#o#B#:::#, #:Hooo::###, ###H#:###, #:::#, #####, , , ",
" , ####, #::######, #::::#::#, #:HH::::#,#######H#::#::#,#::#o:oo:###H##,#::#o#BoH:::::#,#::#o#oB#:#:::#,#:HHoooo#:#####,#:@H:#:##:#,#:HHH#::::#,#::::######,######",
"####,#::###,#:H::###,#:H:H::###,#:H:H:H::###,#:H:H:H::::#,#:H:H::#:::##,#:H::##:HHH:#,#@:####:::::##,##:#:#oHHHHHo#, #:###ooooooo##, #:::oBBBBBBBo#, ####ooooooooo#, ###########",
" , , #######, #:@#::#####, #:HH::H:::#, #::#o##H#:#, ##H#ooo:::#, ##:ooo##H##, #::##o##::#, #::H::H:::#, #::#:::#::#, ###########, , ",
" , , #####, #:@:#, #:H:#, #HoH#, ###oHo##, ##:oHoHo###, #::HoHoH::#, #::::o::::#, ###########, , , ",
" , #############, #::H:H:HoBoo#, #:H:H:H:Booo#, #::H:H:HoBoo#, #:H:H:H:Booo#, #::H:H:HoBoo#, #:H:H:H:Booo#, #::H:H:HoBoo#, #:H:H:H:Booo#, #::H:H:HoBoo#, #@H:H:H:Booo#, #############, ",
" #, ##, ###, #:::#, ########:#:#, #:H:H:H:H:::#, ##:#o#o#o#@H#,###ooooooo:::##, ##:#:#:#:#H##, #:H:H:H:H:::#, ########:#:#, #:::#, ###, ##",
" , , , #######, #::oH:###, #:oHoH::#, #BHoHo@:#, #:oHoH:##, #::oH::#, ########, , , , ",
" , , #####, #:::#,##########:B:###,#::::::::::o:::#,#:HHHHBBBBHooo@#,#::::::::::o:::#,##########:B:###, #:::#, #####, , , ",
" , , ####, ######::#####, #@H::::H::H:#, #H###:H:#:#:#, #::#::#:H:::#, #:H#::::#:###, #::H:#H#:::#, #ooooooooo:#, ########:::#, #####, , ",
" , #####, #:::#, #H::#, ###::H###, #::H::H:#,###:#:###:#######,#:::#:###:##::oo#,#:H::H::::::@:oo#,#####:####:#::oo#, #::::::######, ########, , ",
" , , ###########, #::::#::::#, #:H@HHHHH:#, #:::::::::#, #####:#####, #o::#, #o::#, #ooo#, #o::#, #####, , ",
" , #####, #:@:#, #:H:#, ###:o:###, #:::B:::#, #:BBBBB:#, #:::B:::#, ###HBH###, #:o:#, #:B:#, #:o:#, #####, ",
" , ##############, #o:::::::::::#, #oH:H:H:H:H::#, #o#########::#, #o#oB:H:ooHB##, #o#:H:H:BoH@#, #o#o::H:ooHH#, #o#########o#, #o::::::::::#, #o#H#H#H#H#H#, #o::::::::::#, #############, ",
" , , ############, #oo::#:::::###, #oo::#:H::H::#, #oo::#H####::#, #oo::::@:##::#, #oo::#:#::H:##, ######:##H:H:#, #:H::H:H:H:#, #::::#:::::#, ############, , ",
" ####, ########::####, #:::##ooooo::#, #::H::##ooo#:#, ##::H::###:#:#, #:#:H::#::::#, #::#:H::#:::#, #:::#:H::#::#, #::::#:H:#:##, ####::#:H::#, ##::#:H:#, ##@#:::#, #######, ",
" , , #### ####, #oo########oo#, #BoBoooooBoBo#, #:H:H:H:H:H:H#, #H:H:H@H:H:H:#, #:H:H:H:H:H:H#, #H:H:H:H:H:H:#, #oBoBoooooBoB#, #oo########oo#, #### ####, , ",
" , , #####, ##:::####, #:ooB:H:#, ####:#o#:::#, #::::oBo#@##, #:#H##H##:#, #:::::H:H:#, ##::#:::###, ########, , , ",
" , , , ######, #::::#, #:H::####, #:HBooB:#, #:BooBH:#, ####::H:#, #:@::#, ######, , , ",
" , , , #####, ####o::##, #:HoHo::#, #@H#:#H:#, #:Ho:o::#, ####H#H:#, #o:o::#, #######, , , ",
" , , , , ############, #::::ooo:H:#, #:HHHBBB:H@#, #::::ooo:H:#, ############, , , , , ",
" , , , , ##########, ##:::::::#, #:::#H#H:#, #:HH::oHo#, #:@###ooo#, ##########, , , , ",
" , , ####, #::#####, ##H:##::#, #::H@H::#, #:::##H:#, ###o##:###, #oooH:H:#, ##oo::::#, ########, , , ",
"##### ####,#ooo# #::####,#ooo###::H::#,#oooo##:H::H###,##oooo##:::H::#,###ooo:##:H:H:#,#:##::::#::H::#,#::##:#:###:####,#:H:#:#H::H::::#,#::H:@:H::::H::#,#:::#:H:HH:H:###,#::######::###,#:## ####,###",
" , , , #######, #o:o:o#, #:HHH:#, #oH@Ho#, #:HHH:#, #o:o:o#, #######, , , , ",
" , ####, #######::#, #:::::H::#, #:::H##@H#, ##H#ooo#:#, #:Hooo::#, #:#o:o#:##, #:::#:#H:#, #H::H::::#, #::#######, ####, , ",
" , , #########, #:::#:::#, #:::::::#, #####B###:##, #:::ooo:::#, #:#:#B###H##, #:H::::H:::#, #####@:#:::#, ########, , , ",
"#####,#ooo# #####,#ooo###:::#,#oooo:::HH#####,#oooo::#::#:::##,#oo#H####:#H#::#,##:H::#:::::HH:#,#::H#:@:H:HH#::#,#:H:H:H:#:::H:##,#:::#::H:##:::#,######:::######, #####, , ",
" ,###############,###o#::::::####,##oo#:H::H:#::#,#ooo#:##:H:#::#,#ooooo::#HH:::#,##ooooH::::#H:#,####:#######::#,#:::H::::::::##,#::H:#::H#:H:##,#:H###:H:#:HH:#,#:::@#::##::::#,###############, ",
" , ########, #::#:::#, #######:HHooo#, #::::::::#ooo#, #:######H#ooo#,##:#::::::#ooo#,#::#:#H:H:#####,#:#:H:H:H:#,#:@::H:#::#,#####H:HH:#, #:::::#, #######, ",
" , #####, ######:::#, ###::::o:H:#, #:H::#Ho#H##, #::#::@o#::#, ##:####o:::#, #:H::#B####, #:##:#o::#, #:::::o#:#, ###H:::::#, #::#####, ####, ",
" , , ####, #####::#####, #::::H:::H:#, #::H#H##:::#, ###:#oBo:###, #:ooo:@#, ##:#H###, #:::#, #####, , , ",
" , , , ########, ####::::o:#, #::H:H:Ho:#, #::o####o##, #:HoH:H:@#, #::o::####, #######, , , , ",
" , , #####, #:::#, ###HoH#####, #:::o:H:::#, #:##H##:@:#, #:::o:#####, ###:o:#, #:::#, #####, , , ",
" , , #####, #:@:######, #:#ooB:::#, #:ooo#:::#, ##H##:H:H:#, #:::#H#####, #:::H:::#, #####:#:#, #:::#, #####, , ",
" ######, ###::::##, #:::##::#, ###H##::#:#, ##:::::oo#:#, #::H#H#Bo#:#, #:HH@:#oB#:###, #::HH:#oo#:::#, ##::::#ooH:::#, ###H##o:#:###, #::###::#, ##:::::##, #######, ",
" , #######, #::#::#, #::HH:#, ######:H#::#, #ooo###:#::##, #o::#::H:#::#, #o::::H:H:H:#, #o::#::H:#::#, #ooo###:#::##, ######:H:::#, #@:#::#, #######, ",
" ######, #::::#,##### ###:##:#,#oo:#####:H::#:#,#oo:::::H:::H#:#,#oo::##:##:::#:#,#oo:##:H:#H:H#:#,#oo:#:::::H::#:#,#oo:#::H:###H::#,#oo:#:H:H::H:###,###:##:#:H::::#, #::::#@##:H:#, #########::##, ####",
" , , #, #####, ###:@:###, #::H:H::#, #:BoBoB:#, ##:oH:Ho:##, ###:BoBoB:###,####::H:H::####, ######::#, ## ##, , ",
" ##############, #:@:B:B:B:#::##, #H#::B:B::#:::#, #:#:B:B:B:::::#, #:#::B:B::##:##, #:#:B:B:B:##:#, #:#::B:B::##:#, #:#:B:B:B:##:#, #:#::B:B::##:#, #:#:B:o:B:##:##,##:##########::#,#::::::::::::::#,#:::#########::#,##### ####",
" , , #############, #::::#::##::#, #HHH:#:HH::H##, #:H::#::oooo:#, #::H::#Ho##o:#, #::#:H#:oooo##, ##H:H::#Ho##o:#, #:H::H:@Hoooo:#, #:::###::######, ##### ####, , ",
" #########, #:::::::#, #::H#H#:#, ######::#:H:#, #:::#:H::H::#, ##:H:::::###:#, #:::#H####:::#, #::::H:###:###, #####oo:@#:##, #oooH:HH:#, #ooo#::::#, #ooo######, #####, ",
"#### ####,#::#######oo###,#:H:H:H::#oooo#,#:H:::HH:#BBBo#,#:H:H:H::#ooBo#,#::H:H:H:#BoBo#,##:H:H:H:oBoBo##,#::H:H:H:oBoBo@#,#::H:H:H:#BoBo##,#:H:H:H::#ooBo#,#:H:::HH:#BBBo#,#:H:H:H::#oooo#,#::#######oo###,#### ####",
" #####,#######:::#,#:::##o:::#,#::H#oo::###,##::ooo#HH:#####, #:Ho#oH:::::::#, #:H###H##:#:H:#, #:::#:::::HH#:#, ##HH#:##H#H:::#, #ooo:H@:H:::###, #ooo#H#:::###, #ooo::#####, #######, ",
" , #### ######, #::####::::#, ##B:::B:BB::#, #:H:B::::B#:#, #:o:::###:::#, ######:::#@##, #:B:o:B::BB:#, #:::#:::#:::#, ##B:::B:#H#:#, #::#####:::#, #### #####, , ",
" , , , #########, #:::#:::#, #:HHHHH:#, ##:H:H:H:#, #:H::@:::#, #:H:####:##, #::#ooooo:#, ##::ooooo:#, ##########, , ",
" , #######, #:::::#, #:H:H:##, #####oo#####,######ooBo::H:#,#::H@Hoooo#HH:#,#:::H:#H###:::#,#####:::::::###, ###::####, #::#, ####, , ",
" , , , #####, #:::######, #:H:oo:H:#, ##H:ooHH@#, #::oo:H:#, #########, , , , , ",
" , , , #####, #:::######, ###H#o:::::#, #:H:ooo#:H:#, #@:Ho#BH:::#, ####::::####, ######, , , , ",
" , #####,#####:::#,#:::H:@:#,#::H:#o#####,##H:##o##::####, #::ooooo:H#::#, #:H##o##::#H:#, #:::#o##:::::#, ###:H:#####:##, #:#H:::::H:#, #::::###:::#, ###### #####, ",
" , , #######, #::B::#, #:@oH:#, #:Ho::#, #BoBBB#, #::B::#, #:HBH:#, #::o::#, #######, , , ",
" #########, #::::#::#,###:#H::H:####,#::H::##oo#::###,#:#::H:#ooH:H::#,#:HH::H#oo::#::#,##::#::ooo#H:::#, #H:@:#ooo#:H::#, #::::#oooH:::##, #:##H:###:::##, #:::H:::::###, #::########, ####, ",
" ##########, ####oooooo::#, #:::ooooo#::#, #::#oooooo:##, ##:####H##H#, #@H::H:H:::###, #:HH::::##:::#, #:#::HH##::#:#, #:::H::#:HH::#, #::H::H:::#H:#, ####:::#:H:H:#, #:::#:::::#, ###########, ",
" #########, #:::::::#, #H:HHH::#, #:::#:H:#, #:::H@H:#, ###H:H:#:##, #:::H#H#:#,#####:#::#:::#,#ooo::#:H#:###,#ooooo:::#:#,#ooooo#:H#:#,########:::#, #####, ",
" , ##### ######, #:::###::::#, ##:H:H:#H:#H#, #::H:@:H::H:##, #:#::##:#oooo#, #::##:H:#o##o#, ##::H::::oooo#, #:HH:#H#oooo#, #:::#:::#H:##, #####:H::::#, ####::##, ####, ",
"####,#::#,#::##########,#::::##:::::#,#oo#::::HH#:#,#oo::##:::H:###,#oo#::##H#:H::#,#oo:::#:@H:H::#,#oo#::#:H:H:::#,#:o:::#:H:H:###,#::#::#:::###,#::#::::###,#########, ",
" , #####, #:::::#, #::H##::#, #::#:::H:#,# # #:#::#:#:#, # # #:H:H::H:#, #######:#H#::#, #::H:H::::::#, #@ooH:BBo###, #oooooo#####, ############, , ",
" , ########, #::::::#, #::H:::#####, ####:::H:::#, #::##H#:H::#, #::::@#:#:#####, ##:##:H:H:HH:::#, #:::#::#:::#:::#,##:::############,#oooo#,#oooo#,######, ",
" , ############, #::::o:#:::#, #:::HB:#:H:#, #:::#o:#:###, #::##o#:::#, ##::##o#:H:##, #:::#:o#H#::#, #:@:#:o:::H:#, #::##:BHH#::#, #:::#:o::::##, #:::########, #####, ",
" , ,#########,#:::#:::##########,#::H:H::#:::#oooo#,##:H:H:H:H::#oooo#, #@H:H:H:H:HoBoBo#, #:H:H:H:H:HoBoBo#,##:H:H:H:H::#oooo#,#::H:H::#:::#oooo#,#:::#:::##########,#########, , ",
" , ##########, ##::##::::#####, ##:::H::#:H::H:#, #:::H##::HH#:::#, #::::H:::#:::::#, #H####:#####:::#, #:#:ooooooo:@:##,##:::oBoBoBo:#:##,#:::######:###::#,#:#H:::::H::::H:#,#:::#############,#####, "
};
public void init()
{
String param;
int i;
if (g==null) g = getGraphics();
URL url = getCodeBase();
String str = "";
int b = 0;
MediaTracker tracker = new MediaTracker(this);
mainImg = getImage(url, "images.gif");
tracker.addImage(mainImg,0);
for (i=0; i<=MAX_IMG; i++)
{
xImg[i] = extractImage(xCoord[i]);
tracker.addImage(xImg[i], i+1);
}
try { tracker.waitForAll(); }
catch (InterruptedException e) {}
setLayout(new BorderLayout());
txt1 = new TextField(25);
txt1.setForeground(new Color(255,255,204));
txt1.setBackground(new Color(102,51,51));
txt1.setEditable(false);
Panel p = new Panel();
p.add(txt1);
p.add(btnP2);
p.add(btnP);
p.add(btnN);
p.add(btnN2);
p.add(btn1);
p.add(btnU);
add("South", p);
gLevel = 0;
dat2Canvas(0);
firstTime = 1;
}
public boolean dat2Canvas(int dlvl)
{
int i,x,y;
byte z = 0;
String param;
try
{
gLevel += dlvl; if (gLevel<0) gLevel = 0;
param = getParameter("data"+gLevel);
if (param==null) param = biDat[gLevel];
}
catch (ArrayIndexOutOfBoundsException exc)
{
gLevel -= dlvl;
return false;
}
for (y=0; y<=MAX_Y; y++)
{ for (x=0; x<=MAX_X; x++)
{ currCanvas[y][x] = 0; }
}
x = y = 0;
for (i=0; i<param.length(); i++)
{
z = (byte)(mCode.indexOf(param.charAt(i)) % 10);
if (z>MAX_IMG || x>MAX_X)
{
x = 0; y++;
if (y>MAX_Y) break;
}
else
{
if (z<0) z = 0;
currCanvas[y][x] = z;
x++;
}
}
for (i=0; i<MAX_HIST; i++) { xMove[i] = 0; }
mvPos = 0;
txt1.setText(" Restarting game level "+gLevel+".");
if (firstTime==1) firstTime = 0;
return true;
}
public boolean action(Event e, Object arg)
{
int h = -1;
if (e.target==btnP2) h = 16;
else if (e.target==btnP) h = 44;
else if (e.target==btnN) h = 46;
else if (e.target==btnN2) h = 14;
else if (e.target==btn1) h = 18;
else if (e.target==btnU) h = 8;
if (h>0) keyDown(e, h);
return true;
}
public boolean keyDown(Event e, int c)
{
int dx = 0;
int dy = 0;
int ch = 0;
int h = 0;
byte z0,z1,z2;
String st0 = "";
switch (c)
{
case e.UP: dy = -1; h = 1; break;
case e.DOWN: dy = 1; h = 3; break;
case e.LEFT: dx = -1; h = 5; break;
case e.RIGHT: dx = 1; h = 7; break;
case 8:
h = xMove[--mvPos];
if (h<=0) return true;
if (h>8) { ch = 5; h = h % 8; st0 = "(Pushed)"; }
if (h<4) { dy = h-2; if (dy>0) st0 = "Down "+st0; else st0 = "Up "+st0; }
else { dx = h-6; if (dx>0) st0 = "Right "+st0; else st0 = "Left "+st0; }
if (ch>0)
{
int xTmp = xPos+dx;
int yTmp = yPos+dy;
z0 = (byte)(currCanvas[yTmp][xTmp] -= 5);
g.drawImage(xImg[z0],X_0+20*xTmp,Y_0+20*yTmp,this);
}
z0 = (byte)(currCanvas[yPos][xPos] += ch-3);
g.drawImage(xImg[z0],X_0+20*xPos,Y_0+20*yPos,this);
xPos -= dx; yPos -= dy;
z0 = (byte)(currCanvas[yPos][xPos] += 3);
g.drawImage(xImg[z0],X_0+20*xPos,Y_0+20*yPos,this);
txt1.setText(" History #"+mvPos+" : "+st0);
return true;
case 18:
if (mvPos==0) { firstTime = (byte)(1-firstTime); paint(null); return true; }
h = -100; break;
case 44: h = -101; break;
case 46: h = -99; break;
case 14: h = -90; break;
case 16: h = -110; break;
default:
txt1.setText(" Use ^P,<,>,^N,^R, or BS key.");
break;
}
if (dx==0 && dy==0)
{
if (h<0) { if (dat2Canvas(h+100)) paint(null); }
return true;
}
int xTmp = xPos+dx;
int yTmp = yPos+dy;
z0 = currCanvas[yPos][xPos];
z1 = currCanvas[yTmp][xTmp];
z2 = 0;
if (z1==1 || z1==2)
{
z0 -= 3; z1 += 3;
ch = 1;
}
else
if ((z1==6 || z1==7) &&
((z2=currCanvas[yTmp+dy][xTmp+dx])==1 || z2==2))
{
z0 -= 3; z1 -= 2; z2 += 5;
ch = 2; h += 8;
}
if (ch>0)
{
currCanvas[yPos][xPos] = z0;
currCanvas[yTmp][xTmp] = z1;
g.drawImage(xImg[z0],X_0+20*xPos,Y_0+20*yPos,this);
g.drawImage(xImg[z1],X_0+20*xTmp,Y_0+20*yTmp,this);
yPos = yTmp; xPos = xTmp;
if (ch==2)
{
yTmp += dy; xTmp += dx;
currCanvas[yTmp][xTmp] = z2;
g.drawImage(xImg[z2],X_0+20*xTmp,Y_0+20*yTmp,this);
}
xMove[(mvPos++) % MAX_HIST] = (byte)h;
z0 = 0;
for (dy=0; dy<=MAX_Y; dy++)
{ for (dx=0; dx<=MAX_X; dx++)
{ if (currCanvas[dy][dx]==6) z0++; }
}
if (z0==0) { txt1.setText(" Completed after "+mvPos+" steps."); }
else { txt1.setText(" Step: "+mvPos+", Load: "+z0); }
}
return true;
}
private Image extractImage(int[] xyCoord)
{
Image newImage;
ImageFilter filter;
ImageProducer producer;
filter = new CropImageFilter(xyCoord[0],xyCoord[1],xyCoord[2],xyCoord[3]);
producer = new FilteredImageSource(mainImg.getSource(), filter);
newImage = createImage(producer);
return newImage;
}
public void paint(Graphics g)
{
if (g==null) g = getGraphics();
int y2 = Y_0;
for (int y=0; y<=MAX_Y; y++)
{
int x2 = X_0;
for (int x=0; x<=MAX_X; x++)
{
byte z = currCanvas[y][x];
if (z==4 || z==5) { xPos = x; yPos = y; }
if (firstTime==1 || z>MAX_IMG) z = 0;
g.drawImage(xImg[z],x2,y2,this);
x2 += 20;
}
y2 += 20;
}
if (firstTime==1)
{
int y = 30, x = 15;
g.setColor(new Color(255,255,204));
String str = "*SOKOBAN* (Java Applet version) 1999 by Riza PN";
g.drawString(str,15,y);
txt1.setText(str);
y += 25; g.drawString("Objective of this game is to put every object into the marked place.",x,y);
y += 15; g.drawString("We can not pull the object, and we can only push one of it every time.",x,y);
y += 25; g.drawString("Use arrow keys to move the worker.",x,y);
y += 15; g.drawString("Press [Ctrl]-R (or click X button) to restart the game.",x,y);
y += 15; g.drawString("Press < to go to the previous level.",x,y);
y += 15; g.drawString("Press > to go to the next level.",x,y);
y += 15; g.drawString("Press [Ctrl]-P (or << button) to go to 10 levels before.",x,y);
y += 15; g.drawString("Press [Ctrl]-N (or >> button) to go to 10 levels after.",x,y);
y += 15; g.drawString("Press Backspace (or U button) to undo until 100 last movement.",x,y);
y += 25; g.drawString("SOKOBAN is trademark by somebody else whose wrote this game for",x,y);
y += 15; g.drawString("the first time. I just convert it into Java Applet and hope you enjoy it.",x,y);
y += 30; g.drawString("Salam from Riza PN - Jakarta, Indonesia.",x,y);
}
}
}
Sample HTML Source:
###If it isn't too long, put it here, escaping the angle brackets.
Otherwise putit in the config page
### eg.
<applet code=Applet3.class name=Applet3 width=711 height=401 >
<param name=label value="This string was passed from the HTML host.">
<param name=background value="666666">
<param name=foreground value="FFFFFF">
</applet>
Back to Sokoban
New on the Java Boutique:
New Review:
Time Management Made Easy with the Quartz Enterprise Job Scheduler
Why not just use the Java timer API? This open source scheduling
API boasts simplicity, ease-of-integration, a well-rounded feature
set, and it's free!
New Applet:
Reverse Complement
Reverse Complement is a simple applet that converts DNA or RNA
sequences into three useful formats.
Elsewhere on internet.com:
WebDeveloper Java
Lots of Java information on webdeveloper.com
WDVL Java
Thorough Java resource at the Web Developer's Virtual Library.
ScriptSearch Java
Hundreds of free Java code files to download.
jGuru: Your View of the Java Universe
Customizable portal with online training, FAQs, regular news updates, and tutorials.
|