トップ
当ブログでは以下の内容を中心に更新する予定です。
- 日記
- プログラミング&開発
- ゲーム
*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で変わった。
- そのランク世界に生成されているボスモンスターの像を探す
- 像に(小さな・普通の・大きな)魂を複数個渡して、ボスモンスターを召喚する
- 倒すとゲートの火種をドロップする
鉱石
まず、鉱石がテクスチャではただの石と同じになっている。目視では見つからない。
最初はバグだと思ったが、どうやら仕様っぽい。
鉱石を探したい場合は「鉱石探知ツール」を使おう。
あと、各鉱石のドロップするランクが微妙に変わっていた。
鉱石・原石 - 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つは攻撃時に使用する特技だ。
これは前者とは違い、ユーザーと特技が紐づいている訳ではなく「ただのアイテム」だ。
なので、人に渡すこともできるし、強い特技をクラフトで作ることもできる。
その他
- 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」がどれかを判別することができません。
なのでフォルダを分けてあげて区別をするんです。