0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

processingで作る簡単な障害物レースfor Java

Posted at

#prossesingはプログラミング初心者におすすめ
prossesingはデザインアートを作ることができる環境です。
言語はJavaベースで作ってありますが、Pythonなど他の言語で書くことも可能です。
また、文の構造なども他のものに比べて見やすいので、まず簡単に動くプログラミングを作りたい!という方にはおすすめです。
ここでは、prossesing初心者の僕が1日で作れた簡単なゲームを紹介していきます。
コードの読みにくさはあるかもしれませんが、ご了承ください(汗

#今回作るゲーム
今回は、向かってくる障害物を避けるゲームを作っていきたいと思います。
機能としては、ジャンプ・衝突判定で作ることができます。
ここでは、コードと簡単な流れをご紹介します。
不明点があれば、コメントして頂けたらお答えします。

#コード紹介
簡単な流れだけご紹介します。
今回は棒人間を走らせるようにします。
まず必要な画像をダウンロードし、繰り返し表示するものはリストに格納していきます。

次に棒人間をジャンプさせるために、yの更新式を工夫します。
クリックした瞬間に上方向に速度を持たせ、重力に見立てた力を働かせることで落下させています。
簡単な物理計算をしています。

また、向かってくる障害物は一定の速度でこちらに向かってくるものと考えて、速度をv、位置をxとして、位置に関する更新式を書いています。

最後に、衝突判定はAND演算子(2つの条件を満たしたときに衝突したと判定)を用いて判定してます。
判定条件は、画像下の部分が障害物よりも下の位置に来た時にループを停止するようにしています。

以下にコードを載せておきます。
画像は自分のPCにある画像を使っているため、直接のコピペでは動きません。
棒人間の動きをずらした画像を8枚と、河野大臣の画像が1枚必要です。笑

prossesing-for-java
int numFrames = 8;  // The number of frames in the animation
int currentFrame = 0;
PImage[] img = new PImage[numFrames];
PImage img2;
float y,vy,Fy,x,z,vx;

void setup() {
  frameRate(24);
  size(600, 600);
  y = 0;
  vy = 0;
  Fy = 0;
  x = 570;
  z = 570;
  vx = 5;
  // The image file must be in the data folder of the current sketch 
  // to load successfully
  img2 = loadImage("kouno-tarou.jpg");
  img[0] = loadImage("stick0.png");  // Load the image into the program  
  img[1] = loadImage("stick1.png");
  img[2] = loadImage("stick2.png");
  img[3] = loadImage("stick3.png");
  img[4] = loadImage("stick4.png");
  img[5] = loadImage("stick5.png");
  img[6] = loadImage("stick6.png");
  img[7] = loadImage("stick7.png");
}

void draw() {
  background(255);
  
  vy = vy +Fy;
  
  y = y + vy;
  
  x = x - vx;
  
  if(y > 0){
  vy = 0;
  Fy = 0;
  y = 0;
  }
  
  if(x < 0){
    x = 570;
  }
  currentFrame = (currentFrame+1) % numFrames;
  image(img[currentFrame], 0, 450 + y);
  
  fill(0);
  rect(x,z,30,30);
  
  if ( ((0<x) && (x<100)) && (600+y > 570)){
  fill(253);
  rect(0,0,600,600);
  image(img2,0,0);
  noLoop();
  }
}

void mouseClicked(){
  Fy =1.2;
  vy = -20;
}
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?