カーレースゲーム
Processingで作ったカーレースゲームです。
Processingで作ったカーレースゲームです。 左上にフレームレートを表示しています。 道に当たり判定があるので、脱線はしません。 疑似3Ⅾのゲームで、割り算で遠近感(木の大きさ、道幅)を出しています。道がカーブする時、⇨ ⇦が出て、お知らせしてくれます。
ソースコードです。⇩
PFont font; float[] b = new float[2000]; void tex(String tex, int x, int y, int s, int r, int g, int b) { textFont(font, 20*s); fill(0); text(tex, 0+x+s+1, (20*s)+s+1+y); fill(r, g, b); text(tex, 0+x, (20*s)+y); } void stex(String tex, int x, int y, float s, int r, int g, int b) { textFont(font, 20*s); fill(0); for (int iy = -int(s); iy < int(s)+1; iy++) { for (int ix = -int(s); ix < int(s)+1; ix++) { text(tex, 0+x+ix+s, y+iy+s); } } fill(r, g, b); text(tex, 0+x+s, y+s); } int bba; float ok; float okh,okhh; float speed; float s; float sy; boolean right, left, down, up; float dd; PImage img; PImage y; PImage yh; PImage k; PImage bg = createImage(1080, 720, RGB); PImage bga = createImage(1080, 720, RGB); float ff; int hhh; void setup() { //textAlign(RIGHT, BOTTOM); img = loadImage("a.png"); k = loadImage("b.png"); y = loadImage("y.png"); yh = loadImage("yh.png"); font = loadFont("JF-Dot-Kappa-20-Regular-20.vlw"); size(1080, 720); //noStroke(); noSmooth(); frameRate(60); background(255); //textAlign(CENTER, CENTER); textAlign(LEFT, TOP); for (int i = 0; i < 720; i++) { b[i] = sin(s)*16; s += 0.1; } for (int yyy = 0; yyy < 720; yyy++) { for (int xxx = 0; xxx < 1080; xxx++) { bg.pixels[hhh] = color(150+(yyy/3.3), 180+(yyy/4.5), 255); bga.pixels[hhh] = color(150+(yyy/3.3), 180+(yyy/4.5), 255); hhh++; } } hhh = 777600/2; dd = 100; for (int yyy = 720/2; yyy < 720; yyy++) { for (int xxx = 0; xxx < 1080; xxx++) { bg.pixels[hhh] = color(100+dd, 255, 60); hhh++; } dd -= 0.2; } } float fc = 1.01; float nfc = 3; float kj; float bl; float add; float gg; float aa; float kkk; float x = 1080/2-75; float a; float abb; float ss = -100; float xs; float st = 0; void draw() { background(255); aa = 1; a = 2; abb = nfc; gg = 1; for (float ys = 720/2; ys < 720; ys++) { stroke(0); line(1080/2-bl+(b[int(a)]*gg), ys, 1080/2+bl+(b[int(a)]*gg), ys); bl += 1; add += 64/aa; if (aa > 0)aa += 0.7; if (add > 32)add = -32; a += abb; abb /= fc; gg *= 1.001; } a = 2; //add = ss; add = ss; if (ss < -180)ss = -100; ss -= 16; bl = 10; if (green(get(int(x+75)-100, 720/2+200)) > 100) { x += 16; //xs = 8; if (speed > 2)speed -= 2; } if (green(get(int(x+75)+100, 720/2+200)) > 100) { x -= 16; //xs = -8; if (speed > 2)speed -= 2; } image(bg, 0, 0); aa = 1; abb = nfc; gg = 1; for (float ys = 720/2; ys < 720; ys++) { stroke(250); line((1080/2-bl+(b[int(a)]*gg))-2, ys, (1080/2+bl+(b[int(a)]*gg))+2, ys); stroke((255-(bl*0.7/16+128+64+32))+128+64); line(1080/2-bl+(b[int(a)]*gg), ys, 1080/2+bl+(b[int(a)]*gg), ys); kkk += 1-((ys-360)/720); bl += 1; add += 64/aa; if (aa > 0)aa += 0.7; if (add > 32)add = -32; a += abb; if(abb > 0)abb /= fc; gg *= 1.001; } a = 2; //add = ss; add = ss; if (ss < -180)ss = -100; ss -= 16; bl = 20; aa = 1; abb = nfc; gg = 1; kkk = -kj; kj += speed; if (kj > 30)kj = 0; for (float ys = 720/2-25; ys < 720*1.5; ys++) { if (kkk > 0) { image(k, (1080/2-bl+(b[int(a)]*gg))-2-(100*((ys-360)/720)*4)-100-12, ys-(200*((ys-360)/720)*4)-25, (100*((ys-360)/720)*4)+25, (200*((ys-360)/720)*4)+50); image(k, (1080/2+bl+(b[int(a)]*gg))+2+(100*((ys-360)/720)*4)+100-12, ys-(200*((ys-360)/720)*4)-25, (100*((ys-360)/720)*4)+25, (200*((ys-360)/720)*4)+50); kkk = -30; } kkk += 1-((ys-360)/720)+0.003; bl += 1; add += 64/aa; if (aa > 0)aa += 0.7; if (add > 32)add = -32; a += abb; abb /= fc; gg *= 1.001; } //image(bga, 0, 0); a = 2; //add = ss; add = ss; if (ss < -180)ss = -100; ss -= 16; bl = 20; okh = 0; for (int ffi = 0; ffi < speed*2; ffi++) { okhh = ok; ok = (noise(s)*(st*2)-st); okh += ok-okhh; b[2] = ok; s += 0.0004; for (int i = 1; i < 720-1; i++) { b[(720-i)+1] = b[(720-i)]; } } if (up) { speed += 0.1; } if (right)xs += 1; if (left)xs -= 1; xs /= 1.1; x += xs; if (speed > 0)speed -= 0.07; if (speed > 10)speed = 10; if (st < 480 && speed > 0.05)st += 5; noStroke(); image(img, x, 720/2+100, 150, 100); /* fill(0); rect(1080/2-60, 720/2+150, 10, 10); fill(0); rect(1080/2+60, 720/2+150, 10, 10); */ stex(str(frameRate), 0, 0, 2, 255, 255, 255); if (okh < -2) { image(y, 1080/2-100+(sin(sy)*25), 0, 200, 100); } if (okh > 2) { image(yh, 1080/2-100+(sin(sy)*25), 0, 200, 100); } sy += PI/30; } void keyPressed() { if (keyCode == RIGHT || key == 'd') right = true; if (keyCode == LEFT || key == 'a') left = true; if (keyCode == UP || key == 'w') up = true; if (keyCode == DOWN || key == 's') down = true; } void keyReleased() { if (keyCode == RIGHT || key == 'd') right = false; if (keyCode == LEFT || key == 'a') left = false; if (keyCode == UP || key == 'w') up = false; if (keyCode == DOWN || key == 's') down = false; }
使用画像です。かっこいいオリジナル画像を作って、このソースコードを参考にチェレンジしてみてください!