全知全能を目指す人のありがたい雑記

何かしら意味のあるありがた~い話か、意味のない雑念だらけの日記を書く予定です。

トップ

当ブログでは以下の内容を中心に更新する予定です。

  • 日記
  • プログラミング&開発
  • ゲーム
 
記事の方針として、
「プログラミング&開発」または「ゲーム」のカテゴリを
メインにしていく予定です。 
 
記事の内容としては
「備忘録」や「便利な物の紹介」などを
ありがた~く、独善的に、エゴイスティックに
書いていこうと思います。
(話半分に聞いてやってください*1
 
面白いゲームの紹介や、
プレイングのノウハウなども書けたら良いなぁ。
 
ご質問やご不明点、ご意見等ありましたら
コメントまたは「bluelightbleze@gmail.com」 にてご連絡ください。

*1:気をつけているつもりですが、誤った情報や古い情報を拡散する可能性があるかも。。

入力された値のべき乗を求めるプログラム

脳死で書いたので、もっと早い方法がありそうに思う。

(int)sqrt(num*1.0)も正しく平方根が求められているのか、少し自信がない。
sqrt関数の戻り値が桁落ちして切り捨てされたら正しい値が返ってこないので。

コード

#include <stdio.h>
#include <math.h>

int main(void)
{
    int num;
    scanf("%d", &num);
    for(int m = 2; m <= (int)sqrt(num*1.0); m++){
        int current = num;
        int n = 0;
        while(current%m == 0){
            current /= m;
            n++;
            if(current == 1){
                printf("%d is %d to the power of %d\n",num,m,n);
                break;
            }
        }
    }
    
    return 0;
}

入力

256

出力

256 is 2 to the power of 8
256 is 4 to the power of 4
256 is 16 to the power of 2

DQM4⇒DQM5で変わったかもしれない点 part2

ランク6まで進めた。

その辺に生えてるRank特有の草

Rank
1 緑のきつけ草
2 忘れた(ゲンキ草だっけか)
3 凍ったいやし草(溶岩石のかけらと合わせるといやし草)
4 うつくしそう
5 赤いゆめみの花
6 アバキ草

カジノ

絵柄 獲得枚数
スライムナイト 1000
キングスライム 3000
スライムベホマズン 10000
ギガンテ 20000(と表示されるが実際には25000増えている)
ゴールドマン 50000
メタルキング 100000

忠告

カジノはゲームが壊れるのでやらないほうがいい。

壊れても良い方へ

スーパースターの熟練を上げよう。幸運アップがスロットの当選確率を上げている。
幸運アップ2を取得した状態で1日放置したら10万コインから1700万コインになっていた。
90防具や腕輪の交換がし放題なので、小さなメダル集めをする意味がほぼ皆無と化した。
星降るピアスと隼の剣ぐらいだろうか。もしかしてこの仕様、DQM4のときから変わってないの?

緑幻魔と青幻魔

ランク5以降で盗める。
たまにダンジョンの宝箱に入っている。
釣りの意味はあまり無かったのだ。無念。

コンソールの文字出力で周りに装飾をつけてみる。

コンソールの種類によって表示方法が変わるので外枠のサイズを決める部分はあまり真面目に作っていない。

ソースはネストが深くなってしまった。
もっと綺麗にできそうだが疲れるのでやめた。

import java.util.*;
import java.nio.charset.StandardCharsets;

public class Main {
    public static void main(String[] args) throws Exception {
        Scanner s = new Scanner(System.in);
        String input = s.next();
        String[] arr = input.split("");
        int width = arr.length+2;
        
        //1
        for(int row = 0; row < 3; row++){
            for(int column = 0; column < width; column++){
                if(row == 1 && column > 0 && column <= arr.length){
                    System.out.print(arr[column-1]);
                }else{
                    System.out.print(column%2==(row%2==0?0:1)?'■':'□');
                }
            }
            System.out.println();
        }
        
        //2
        width = input.getBytes("Shift_JIS").length+1;
        for(int row = 0; row < 3; row++){
            for(int column = 0; column < width; column++){
                if(row == 1 && column > 0 && column <= arr.length){
                    System.out.print(arr[column-1]);
                }else if(row == 1 && column > arr.length && column != width -1){
                    continue;
                }else{
                    System.out.print(column%2==(row%2==0?0:1)?'■':'□');
                }
            }
            System.out.println();
        }
    }
}

出力結果

■□■□■□■
□あいうえお□
■□■□■□■
■□■□■□■□■□■
□あいうえお□
■□■□■□■□■□■

DQM4⇒DQM5で変わったかもしれない点 part1

次ランクの「ゲートの火種」の作り方

以前はクラフトで作れたが、DQM5で変わった。

  1. そのランク世界に生成されているボスモンスターの像を探す
  2. 像に(小さな・普通の・大きな)魂を複数個渡して、ボスモンスターを召喚する
  3. 倒すとゲートの火種をドロップする

ボスモンスター情報

(Rank1:ヤマタノオロチ、Rank2:バズズ(?)、Rank3:ゾーマ、Rank4:スライムジェネラル、Rank5~:まだ確認していない)

鉱石

まず、鉱石がテクスチャではただの石と同じになっている。目視では見つからない。
最初はバグだと思ったが、どうやら仕様っぽい。
鉱石を探したい場合は「鉱石探知ツール」を使おう。

あと、各鉱石のドロップするランクが微妙に変わっていた。
鉱石・原石 - Minecraft MOD DQM4 wikiと比較

プラチナ、太陽石、月のダイヤ、ルビーはRank4で見つけた。ただしRank3で釣れば集められる。
ミスリルはRank5にならんと見つからなかった。ただしRank4で釣れば集められる。
光の石はRank5でも見つからなかった。ただしRank5で釣れば集められる。

メダルやメタルの鉱石もRank5で見つからない。
ただしどっちもRank3~5辺りで釣れるし、ヘビーメタルはリサイクルストーンからクラフトすればいい。

モンスター

DQM4と全然違う。
湧くモンスターについてはDQM4 wikiはあまり宛にならない。
キングスライムがRank3で出ていたはずが、今作ではRank5で出ていた。

あと、転生モンスターがやたら強いしトラップタワーの壁をぶっ壊してくるんだが、前作ではそんなことなかったよな。

釣り

所感だが、建造物系が全然なくなった気がする。
Rank5で初めて鍾乳洞ダンジョンをゲットした。

あと、緑・青幻魔石がDQM4と比べてやたら釣れるようになった気がする。

特技

誤解しやすい部分があるので先に記述する。
DQM5における特技は、2種類ある。
と考えた方が誤解が無くて済む。

1つは前作同様、熟練度を上げたら身につけられるアレだ。
そう、自動発動なこいつら↓だ。
特技詳細 - Minecraft MOD DQM4 wiki

もう1つは攻撃時に使用する特技だ。
これは前者とは違い、ユーザーと特技が紐づいている訳ではなく「ただのアイテム」だ。
なので、人に渡すこともできるし、強い特技をクラフトで作ることもできる。

攻撃時に使用する特技

DQM4での特技の使い方は忘れたが、DQM5ではインベントリ下部に特技スロットがある。
上段(灰色枠)と下段(緑枠)に分かれている。

上段はただの特技インベントリ。
下段は使いたい特技をセットできる。
なお、使いたい特技は1つしか選択できない。

やり方は

  1. 何かしらの武器を所持した状態でCtrl+Shiftを押しっぱなしにする
  2. 左クリックで特技スロットを左に移動、右クリックで右に移動

これでOK。あとは殴ったら勝手に特技が発動する。

余談だが、この仕様に合わせて特技販売ダーマ神殿とやらが追加された。
特技ダーマ神殿で取得した特技(アイテム)を500Gで買うことができる。

その他

  • Rank2~5辺りの景観が変わった気がする
  • ダンジョンのギミックの種類が増えた
  • ダンジョン最上階の宝箱部屋は最大7部屋まで見つかる場合がありそう。DQM4はどうだったっけ。

Java SE8のStream APIを使って配列の要素を並び替える

C#で言うLINQのようにメソッドチェーンでデータのお料理ができる。
好き

import java.util.*;

public class Main {
    public static void main(String[] args) throws Exception {
        String[] arr = {"ザク", "グフ", "ドム", "ドム"};
        var list = Arrays.asList(arr);
        for(int i = 0; i < 3; i++){
            list.stream()        
                .skip(arr.length - i) 
                .forEach(v -> {
                    System.out.println(v);
                });
            
            list.stream()        
                .limit(arr.length - i) 
                .forEach(v -> {
                    System.out.println(v);
                });
            System.out.println();
        }
    }
}

出力結果

ザク
グフ
ドム
ドム

ドム
ザク
グフ
ドム

ドム
ドム
ザク
グフ

九九の表の一部を表すプログラム

COLとROWの行列を開始地点としてSIZExSIZEの九九の表を表示する

#include <stdio.h>
#define COL 4
#define ROW 2
#define SIZE 3
int main(void){
    for(int row = ROW; row < ROW+SIZE; row++){
        for(int column = COL; column < COL+SIZE; column++){
            printf("%d ",column*row);
        }
        printf("\n");
    }
}
|<

出力
>||
8 10 12 
12 15 18 
16 20 24 

【初心者向け】名前空間がよく分からない人へ

書いてる間に質問がクローズされており、悲しかったのでここに供養します。
初心者向けの内容です。C#カテゴリの質問だけど、Javaやそれ以外の言語も大体同じだと思う。

質問

c#の場合、名前空間.クラス名という構造になっていると思います
system.timerといった具合です
しかし、どうして別々の名前何でしょうか

クラス.クラス、または名前空間.名前空間でもいいんじゃないですか?
似たようなものに見えますし

回答

ディレクトリの仕組みと同じです。

ディレクトリの場合、フォルダ\ファイル名という構造になっています。
C:\Folder\File.txtといった具合です。

同名のFile.txtというファイルがあった場合、フォルダで分けないと区別がつきませんよね。

>クラス.クラス

ファイルの中に別のファイルの中身を持つことはできますが、外部からアクセスするときは面倒です。

ファイルAが別のファイルBの中身を保有しています。
ユーザーがファイルBの中身をみたいとき、ファイルAを介してファイルBの中身を見ないといけません。

それってプログラムする上で結構ノイズだし、適切なときにそういうデータの持ち方をしないと分かりづらいんです。

クラスも同じで、C#ではクラスの中にクラスを定義できます。内部クラスという機能です。ただこれも、外側のクラスを介して内部クラスを介さないといけないので、
「AというオブジェクトはBというオブジェクトを保有している」という関係にならないと、Bを内部クラスにするのは分かりづらいです。

名前空間.名前空間

これは仰る意味がよくわかりません。名前空間ってただのフォルダ名のようなものなので、その表現ではクラスを指定できませんよね。

Timerは名前だけは似ていますが、名前空間によって機能は変わってきます。

  • System.Timers.Timer
  • System.Threading.Timer
  • System.Windows.Forms.Timer
  • System.Windows.Threading.DispatcherTimer

区別をつけるために名前空間があります。

もしあなたが、「仕事のスケジュールを書く」と書かれている「TODO.txt」というファイルを開きたいときに、次のような状態だったらどう区別しますか?

フォルダTODO_LISTの構成
  • TODO.txt
  • TODO.txt
  • TODO.txt
  • TODO.txt

まあ実際は同じファイル名をつけることは出来ないんですけど。
もし同じ名前つけることができてしまったら、「仕事のスケジュールを書く」と書かれている「TODO.txt」がどれかを判別することができません。

なのでフォルダを分けてあげて区別をするんです。

フォルダTODO_LISTの構成
  • 仕事\TODO.txt ←このフォルダに「仕事のスケジュールを書く」と書かれている「TODO.txt」を入れる
  • プライベート\TODO.txt
  • 家族\TODO.txt
  • その他\TODO.txt

このようにしてあげると例え同名のファイルが存在しても、フォルダで区別できます。

C#も同じで、同じ名前空間に同じクラスはつけられません。区別がつかなくなりますから。
なので、各々別の居場所を入れ、その居場所に名前をつけて使い分けようという魂胆で名前空間という存在が生まれたのだと思います。