情報のいろは

主にアプリ作成やプログラミングで得た様々な学びを備忘録として書いていきます。たまに思うままに日常の投稿もします。

<Java>麻雀ゲーム作成に向けたプログラミング

内容

私の趣味に麻雀があるという話は置いておいて、最終的には麻雀の一人プレイができる様なゲームを作ることを視野に入れ、javaを使用したプログラミングの勉強の過程を書いていこうと思います。

参考にしたサイトhttps://docs.pyq.jp/python/library/class.html

         https://java.keicode.com/lang/package-sourcepath.php

参考にした書籍

 読むだけでかなりjava言語特有のオブジェクト指向の中身が理解できる。上巻もあり。

学んだ事

・クラスのアクセス

・クラス拡張

・乱数の発生

 

詳しい演習内容

以下のファイルを実行しました。

HelleWorld.java

Person.java

TestApp.java

Mahjang.java

 

 HelloWorld.java

public class HelloWorld{
        public static void main (String[] args){                 System.out.println("HelloWorld !!");
        } }

 基本中の基本。

コンパイルからの実行は以下の通り。

$ javac Helloworld.java

 →lsコマンドでHelloWorld.classができているか確認。

$ java HelloWorld

<実行結果>

f:id:tk0137:20200915133946j:plain

 

Person.java

public class Person {
        //フィールド
        private int age;
        private String name;
          //コンストラク
        public Person(int age, String name) {
                this.age = age;
                this.name = name;
        }
        //メソッド
        public int getAge(){
                return age;
        }         
public void setAge(int age){
                this.age = age;
        }
          public String getName(){
                return this.name;
        }
          public void setName(String name){
                this.name = name;
        }
          public static void main(String[] args) {
                Person man = new Person(30, "Taro");
                System.out.println("age : " + man.getAge());
                System.out.println("Name : " + man.getName());
        } }

 <実行結果>

f:id:tk0137:20200915133945j:plain

 

TestApp.java

Person.javaのPersonクラス拡張したEmployeeクラスの実装。

class Employee extends Person {
        private int employeeID;
 
        public Employee(int age, String name, int employeeID){
                super(age, name);
                this.employeeID = employeeID;
        }
 
        public int getEmployeeID(){
                return this.employeeID;
        }
 
        public void setEmployeeID(int employeeID) {
                this.employeeID = employeeID;
        }
}
public class TestApp{
        public static void main(String[] args){
                Employee p = new Employee(20, "Ichiro Suzuki", 100);
                System.out.println(p.getAge());
                System.out.println(p.getName());
                System.out.println(p.getEmployeeID());
        }
}

 →コンパイル後、TestApp.classに加え、Employee.classができていることを確認。

<実行結果>

f:id:tk0137:20200915134156j:plain

 

ここまでのまとめ

クラスは他のjavaファイルで定義したクラスからも参照できる。

 →TestApp.javaの中のEployeeクラスは別ファイルのPerson.javaのPersonクラスを拡張

  している。

 

publicクラスは1つファイルにつき1つまで宣言可能。

 →各ファイルのpublicなclass

  ・HelloWorld.java : HelloWorldクラス

  ・Person.java : Personクラス

  ・TestApp.java : TestAppクラス

   ※ファイル名とpublicクラスの名前は一致させる。

 

拡張したクラス(サブクラス)は拡張元のクラス(スーパークラス)のフィールドやメソッドを使える。

 

麻雀ゲームのプログラム作成(一部)

進捗にはなりますが、乱数を利用して配牌をランダムに生成し、表示させるプログラムを書きました。

 

Mahjang.java

import java.util.Random;
 
public class Mahjang{
        public static void main(String[] args){
                String[] pai = {"一索", "二索", "三索", "四索","五索","六索","七索","八索","九索","一筒","二筒","三筒","四筒","五筒","六筒","七筒","八筒","九筒","一萬","二萬","三萬","四萬","五萬","六萬","七萬","八萬","九萬","東","南","西","北","白","發","中"};
                 
                Random r = new Random();
                for(int i=0 ; i<13; i++){
                        String tehai = pai[r.nextInt(pai.length)];
                        System.out.print("|" + tehai);
                }
                System.out.println("|");
        }
}

<実行結果>

ランダム性を確認するため、三回実行した。

f:id:tk0137:20200915133948j:plain

<課題>

一見問題なさそうに見えるが、同じ牌が5個以上出現する可能性がある。

 麻雀牌は同じ牌は4つしかない。よってランダム性を保ちながらも出現回数に制限をつけな

 ければならない。

 

牌の種類ごとに並び替えが実装されていない

 麻雀では役をそろえる必要がある。役には牌の並びが重要になるので、円滑にゲームを進め

 るために並び替えの実装は必要不可欠である。

 

最後に

java言語の基礎をさらいつつ、簡単なプログラムを実装するという遊びのような内容になってしましましたが、実践は体に覚えさせる一番良い方法だと思うので、簡単なことでも手を抜かずに実行しました。

麻雀に関しては役の種類や点数計算の実装などやることが豊富なので、完成には長期にわたる作業が必要になるかと思いますが、これからも定期的に進捗を書いていきたいと思います。ありがとうございました。

 

広告

プログラミングはテックキャンプ