Advertisement
Guest User

Untitled

a guest
Dec 5th, 2010
134
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 7.05 KB | None | 0 0
  1. import java.applet.Applet;
  2. import java.awt.AWTEvent;
  3. import java.awt.AlphaComposite;
  4. import java.awt.Color;
  5. import java.awt.Composite;
  6. import java.awt.Graphics;
  7. import java.awt.Graphics2D;
  8. import java.awt.Image;
  9. import java.awt.Rectangle;
  10. import java.awt.TexturePaint;
  11. import java.awt.event.MouseEvent;
  12. import java.awt.image.BufferedImage;
  13. import java.awt.image.BufferedImageOp;
  14. import java.awt.image.ConvolveOp;
  15. import java.awt.image.Kernel;
  16.  
  17. import javax.imageio.ImageIO;
  18.  
  19. public class x extends Applet implements Runnable {
  20.     private static final float AVERAGE = 1.0f / 12.0f;
  21.     private static final float CENTER = 1.0f - (AVERAGE * 8.0f);
  22.     private static final float FALL = 0.3f;
  23.     private static final int DATA_ITEMS = 5;
  24.    
  25.     private float vy = 0;
  26.    
  27.     public void start() {
  28.         enableEvents(MouseEvent.MOUSE_EVENT_MASK);
  29.         new Thread(this).start();
  30.     }
  31.  
  32.     public void run() {
  33.         try {
  34.             Color SKY = new Color(0xDDDDDD);
  35.             Color LAYER1 = new Color(0xCCCCCC);
  36.             Color LAYER2 = new Color(0xBBBBBB);
  37.             Color ITEMS = new Color(0x888888);
  38.             Color FOREGROUND = new Color(0x000000);
  39.            
  40.             long lastFrame = System.nanoTime();
  41.             int p;
  42.             int frame = 0;
  43.             int[] h1 = new int[] {2,23,0,24,10,-2,12,25,2,13};
  44.             int[] h2 = new int[] {10,-2,12,25,2,13,2,23,0,24};
  45.             int[] buildings = new int[5000 * DATA_ITEMS];
  46.             int next;
  47.             float offset = 0;
  48.             int offset2;
  49.             int offset3;
  50.             boolean atStart = true;
  51.            
  52.             float[] blurMatrix = { AVERAGE, AVERAGE, AVERAGE, AVERAGE, CENTER, AVERAGE, AVERAGE, AVERAGE, AVERAGE};
  53.             BufferedImageOp blurFilter = new ConvolveOp(new Kernel(3, 3,
  54.                     blurMatrix), ConvolveOp.EDGE_NO_OP, null);
  55.            
  56.             Image[] frames = new Image[8];
  57.             BufferedImage runner = ImageIO.read(Thread.currentThread()
  58.                     .getContextClassLoader().getResourceAsStream("r.png"));
  59.             for (int i = 0; i < 8; i++) {
  60.                 frames[i] = blurFilter.filter(runner.getSubimage(i * 8, 0, 8, 15), null);
  61.             }
  62.  
  63.             BufferedImage logo = new BufferedImage(135, 40, BufferedImage.TYPE_INT_ARGB);
  64.             Graphics2D g = (Graphics2D) logo.getGraphics();
  65.             g.setFont(g.getFont().deriveFont(20.0f));
  66.             g.setColor(Color.black);
  67.             g.drawString("4KANABALT",7,25);
  68.             g.setColor(new Color(0xEEEEEE));
  69.             g.drawString("4KANABALT",6,24);
  70.            
  71.             BufferedImage message = new BufferedImage(200, 40, BufferedImage.TYPE_INT_ARGB);
  72.             g = (Graphics2D) message.getGraphics();
  73.             g.setColor(Color.white);
  74.             g.drawString("Click Mouse to Jump/Start", 0, 30);
  75.  
  76.             BufferedImage building = new BufferedImage(20, 20, BufferedImage.TYPE_INT_ARGB);
  77.             g = (Graphics2D) building.getGraphics();
  78.             g.setColor(Color.black);
  79.             g.fillRect(0,0,20,20);
  80.             g.setColor(new Color(0xCCCCCC));
  81.             g.fillRect(10,5,10,10);
  82.             TexturePaint buildingPaint = new TexturePaint(building, new Rectangle(20,20));
  83.            
  84.             BufferedImage state = new BufferedImage(300, 20, BufferedImage.TYPE_INT_ARGB);
  85.            
  86.             BufferedImage bg = new BufferedImage(400, 200, BufferedImage.TYPE_INT_ARGB);
  87.             g = (Graphics2D) bg.getGraphics();
  88.             Graphics2D appletGraphics = (Graphics2D) getGraphics();
  89.             float ypos = 0;
  90.             int distance = 0;
  91.             float speed = 1;
  92.  
  93.             while (true) {
  94.                 // move the game along
  95.                 offset += 1+speed;
  96.                 offset2 = (int) (offset * 1.5f);
  97.                 offset3 = (int) (offset * 3f);
  98.                 if (vy == 0) {
  99.                     frame++;
  100.                 } else {
  101.                     frame = 9;
  102.                 }
  103.                
  104.                 // sky
  105.                 g.setColor(SKY);
  106.                 g.fillRect(0, 0, 400, 200);
  107.  
  108.                 // background buildings
  109.                 g.setColor(LAYER1);
  110.                 for (p=0;p<13;p++) {
  111.                     g.fillRect((p*35)-(int) (offset%35),(int) (50+(h1[(p+ ((int) (offset/35.0f)))% 10])),35,400);
  112.                 }
  113.                 g.setColor(LAYER2);
  114.                 for (p=0;p<10;p++) {
  115.                     g.fillRect((p*60)-(offset2%60),75+(h2[(p+ (offset2/60))% 10]),60,400);
  116.                 }
  117.                
  118.                 if (atStart) {
  119.                     if (vy < 0) {
  120.                         speed = 1;
  121.                         atStart = false;
  122.  
  123.                         for (p=0;p<buildings.length;p+=DATA_ITEMS) {
  124.                             buildings[p] = 130 + (((int) (Math.random() * 15)) * 20);
  125.                             buildings[p+1] = 110 + (int) (Math.random() * 50);
  126.                             buildings[p+2] = 100 + (int) (Math.random() * 20);
  127.                             buildings[p+3] = (int) (Math.random() * (buildings[p] - 130));
  128.                             buildings[p+4] = (int) (Math.random() * 10);
  129.                         }
  130.                         buildings[0] = 710;
  131.                         ypos = buildings[1];
  132.                         vy = 0;
  133.                         offset = 0;
  134.                         frame = 0;
  135.                     }
  136.                    
  137.                     g.drawImage(logo,15,0,400,200,null);
  138.                     g.drawImage(message,52,100,400,80,null);
  139.                 } else {
  140.                     distance = ((int) (offset/5));
  141.                     speed += 0.0005f;
  142.                    
  143.                     // handle falling
  144.                     ypos += vy * speed;
  145.                     vy += FALL;
  146.                    
  147.                     next = -offset3;
  148.                     int px = 100;
  149.                    
  150.                     if (vy >= 0) {
  151.                         for (p=0;p<buildings.length;p+=DATA_ITEMS) {
  152.                             if (next+buildings[p] > -20) {
  153.                                 if ((next-5 < px) && (next+buildings[p]+15 > px))  {                       
  154.                                     int height = buildings[p+1] + 3;
  155.                                    
  156.                                     if (Math.abs(ypos-height) < 5) {
  157.                                         ypos = buildings[p+1];
  158.                                         vy = 0;
  159.                                     }
  160.                                     break;
  161.                                 }
  162.                             }
  163.                            
  164.                             next += buildings[p] + buildings[p+2];
  165.                             if (next > 600) {
  166.                                 break;
  167.                             }
  168.                         }
  169.                     }
  170.                    
  171.                     if (ypos > 220) {
  172.                         atStart = true;
  173.                         vy = 0;
  174.                     }
  175.                    
  176.                     // foreground buildings
  177.                     next = -offset3;
  178.                     for (p=0;p<buildings.length;p+=DATA_ITEMS) {
  179.                         if (next+buildings[p] > -20) {
  180.                             g.setColor(ITEMS);
  181.                             if (buildings[p+4] != 0) {
  182.                                 g.fillRect(40+next+buildings[p+3],buildings[p+1]-50,40,40);
  183.                                 g.fillRect(45+next+buildings[p+3],buildings[p+1]-10,5,10);
  184.                                 g.fillRect(70+next+buildings[p+3],buildings[p+1]-10,5,10);
  185.                             }
  186.                             g.setColor(FOREGROUND);
  187.                             g.fillRect(next-5,buildings[p+1],buildings[p]+10,5);
  188.                            
  189.                             g.translate(next,buildings[p+1]+6);
  190.                             g.setPaint(buildingPaint);
  191.                             g.fillRect(0,0,buildings[p],100);
  192.                             g.setPaint(null);
  193.                             g.translate(-next,-(buildings[p+1]+6));
  194.                         }
  195.                         next += buildings[p] + buildings[p+2];
  196.                         if (next > 600) {
  197.                             break;
  198.                         }
  199.                     }
  200.                    
  201.                     g.drawImage(frames[7 - (((int) (frame / 1.5f)) % 8)], 100, (int) ypos-15, null);
  202.                 }
  203.                
  204.                 Graphics2D gx = (Graphics2D) state.getGraphics();
  205.                 Composite pre = gx.getComposite();
  206.                 gx.setComposite(AlphaComposite.getInstance(AlphaComposite.CLEAR, 0.0f));
  207.                 gx.fillRect(0,0,300,30);
  208.                 gx.setComposite(pre);
  209.                 gx.setFont(gx.getFont().deriveFont(9.0f));
  210.                 gx.setColor(FOREGROUND);
  211.                 gx.drawString(distance+"m",3,11);
  212.                 for (int i=0;i<20;i++) {
  213.                     if (speed*3 < i) {
  214.                         gx.setColor(LAYER2);
  215.                     }
  216.                     gx.drawLine(160+(i*2),2,160+(i*2),12);
  217.                 }
  218.                 g.drawImage(state,0,0,600,30,null);
  219.                 appletGraphics.drawImage(bg, 0, 0, null);
  220.                
  221.                 do
  222.                 {
  223.                     Thread.yield();
  224.                 }
  225.                 while (System.nanoTime() - lastFrame < 0);
  226.                 lastFrame += (1000000000 / 40);
  227.                
  228.                 if (!isActive())
  229.                     return;
  230.  
  231.             }
  232.         } catch (Throwable e) {
  233.             e.printStackTrace();
  234.         }
  235.     }
  236.    
  237.     public void processEvent(AWTEvent e) {
  238.         if (e.getID() == MouseEvent.MOUSE_PRESSED) {
  239.             if (vy == 0) {
  240.                 vy = -5;
  241.             }
  242.         }
  243.     }
  244.  
  245. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement