If you can't read please download the document
allsrc/ch01src/ThreadPool.java
allsrc/ch01src/ThreadPool.javaimportjava.util.LinkedList;
/**
Athreadpoolisagroupofalimitednumberofthreadsthat
areusedtoexecutetasks.
*/
publicclassThreadPoolextendsThreadGroup{
privatebooleanisAlive;
privateLinkedListtaskQueue;
privateintthreadID;
privatestaticintthreadPoolID;
/**
CreatesanewThreadPool.
@paramnumThreadsThenumberofthreadsinthepool.
*/
publicThreadPool(intnumThreads){
super("ThreadPool-"+(threadPoolID++));
setDaemon(true);
isAlive=true;
taskQueue=newLinkedList();
for(inti=0;i=screen.getHeight()/FONT_SIZE){
messages.remove(0);
}
}
/**
Drawthelistofmessages
*/
publicsynchronizedvoiddraw(Graphics2Dg){
Windowwindow=screen.getFullScreenWindow();
g.setRenderingHint(
RenderingHints.KEY_TEXT_ANTIALIASING,
RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
//drawbackground
g.setColor(window.getBackground());
g.fillRect(0,0,screen.getWidth(),screen.getHeight());
//drawmessages
g.setColor(window.getForeground());
inty=FONT_SIZE;
for(inti=0;i1){
animTime+=elapsedTime;
if(animTime>=totalDuration){
animTime=animTime%totalDuration;
currFrameIndex=0;
}
while(animTime>getFrame(currFrameIndex).endTime){
currFrameIndex++;
}
}
}
/**
GetsthisAnimation'scurrentimage.Returnsnullifthis
animationhasnoimages.
*/
publicsynchronizedImagegetImage(){
if(frames.size()==0){
returnnull;
}
else{
returngetFrame(currFrameIndex).image;
}
}
privateAnimFramegetFrame(inti){
return(AnimFrame)frames.get(i);
}
privateclassAnimFrame{
Imageimage;
longendTime;
publicAnimFrame(Imageimage,longendTime){
this.image=image;
this.endTime=endTime;
}
}
}
allsrc/ch04src/src/com/brackeen/javagamebook/graphics/NullRepaintManager.java
allsrc/ch04src/src/com/brackeen/javagamebook/graphics/NullRepaintManager.javapackagecom.brackeen.javagamebook.graphics;
importjavax.swing.RepaintManager;
importjavax.swing.JComponent;
/**
TheNullRepaintManagerisaRepaintManagerthatdoesn't
doanyrepainting.Usefulwhenalltherenderingisdone
manuallybytheapplication.
*/
publicclassNullRepaintManagerextendsRepaintManager{
/**
InstallstheNullRepaintManager.
*/
publicstaticvoidinstall(){
RepaintManagerrepaintManager=newNullRepaintManager();
repaintManager.setDoubleBufferingEnabled(false);
RepaintManager.setCurrentManager(repaintManager);
}
publicvoidaddInvalidComponent(JComponentc){
//donothing
}
publicvoidaddDirtyRegion(JComponentc,intx,inty,
intw,inth)
{
//donothing
}
publicvoidmarkCompletelyDirty(JComponentc){
//donothing
}
publicvoidpaintDirtyRegions(){
//donothing
}
}
allsrc/ch04src/src/com/brackeen/javagamebook/graphics/ScreenManager.java
allsrc/ch04src/src/com/brackeen/javagamebook/graphics/ScreenManager.javapackagecom.brackeen.javagamebook.graphics;
importjava.awt.*;
importjava.awt.image.BufferStrategy;
importjava.awt.image.BufferedImage;
importjava.lang.reflect.InvocationTargetException;
importjavax.swing.JFrame;
/**
TheScreenManagerclassmanagesinitializinganddisplaying
fullscreengraphicsmodes.
*/
publicclassScreenManager{
privateGraphicsDevicedevice;
/**
CreatesanewScreenManagerobject.
*/
publicScreenManager(){
GraphicsEnvironmentenvironment=
GraphicsEnvironment.getLocalGraphicsEnvironment();
device=environment.getDefaultScreenDevice();
}
/**
Returnsalistofcompatibledisplaymodesforthe
defaultdeviceonthesystem.
*/
publicDisplayMode[]getCompatibleDisplayModes(){
returndevice.getDisplayModes();
}
/**
Returnsthefirstcompatiblemodeinalistofmodes.
Returnsnullifnomodesarecompatible.
*/
publicDisplayModefindFirstCompatibleMode(
DisplayModemodes[])
{
DisplayModegoodModes[]=device.getDisplayModes();
for(inti=0;ibackground.getHeight(null))
{
g.setColor(Color.black);
g.fillRect(0,0,screenWidth,screenHeight);
}
//drawparallaxbackgroundimage
if(background!=null){
intx=offsetX*
(screenWidth-background.getWidth(null))/
(screenWidth-mapWidth);
inty=screenHeight-background.getHeight(null);
g.drawImage(background,x,y,null);
}
//drawthevisibletiles
intfirstTileX=pixelsToTiles(-offsetX);
intlastTileX=firstTileX+
pixelsToTiles(screenWidth)+1;
for(inty=0;y