7
2

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.

PC-98のC言語(TurboC++)で湯婆婆を実装してみた

Posted at

#始めに
先週辺りに、「◎◎で湯婆婆を~」というのが流行ってました。今となっては遅いですが、「入力文字列からランダムに一文字選んで表示する」と捉え、練習のつもりで作ってみました。
#環境
PC-9821Cx + TurboC++1.01 + vz1.6 + ms-dos6.2
ちなみにODP(DX66MHz相当)を積んでます。今回は関係ないですけど。
#コード

yubaba.c
/***********************************
 yubaba.c
 
 > tcc yubaba
 
 ***********************************/
#include <stdio.h>
#include <stdlib.h>
#include <dos.h>
#include <string.h>

#define MES1 "湯婆婆:契約書だよ。そこに名前を書きな。\n\r"
#define MES2 "湯婆婆:フン、%s というのかい。贅沢な名だねえ。\n\r"
#define MES3 "湯婆婆:今からおまえの名は %s だ。いいかい、%s だよ。\n\r"
#define MES4 "湯婆婆:分かったら返事をするんだ、%s !!\n\r"

int main()
{
	char name[256],new_name[3];
	int len;
	float r;
	struct time t;
	
	gettime(&t);
	srand(t.ti_hour*100+t.ti_min*10+t.ti_sec);
		
	printf(MES1);
	printf("    名前を全角で> ");
	gets(name);
	len = (int)strlen(name)/2;
	r = 1+rand()%len;
	
	if (r >= len) r-=2;
	new_name[0]=name[2*r];
	new_name[1]=name[2*r+1];
	new_name[2]=NULL;
	printf(MES2,name);
	printf(MES3,new_name,new_name);
	printf(MES4,new_name);
	
	return len;
}

#実行例

B:\SRC\C\TEXT>yubaba
湯婆婆:契約書だよ。そこに名前を書きな。
    名前を全角で> アブドーラ・ザ・ブッチャー
湯婆婆:フン、アブドーラ・ザ・ブッチャー というのかい。贅沢な名だねえ。
湯婆婆:今からおまえの名は ャ だ。いいかい、ャ だよ。
湯婆婆:分かったら返事をするんだ、ャ !!

B:\SRC\C\TEXT>yubaba
湯婆婆:契約書だよ。そこに名前を書きな。
    名前を全角で> ジャイアント馬場
湯婆婆:フン、ジャイアント馬場 というのかい。贅沢な名だねえ。
湯婆婆:今からおまえの名は ト だ。いいかい、ト だよ。
湯婆婆:分かったら返事をするんだ、ト !!

B:\SRC\C\TEXT>yubaba
湯婆婆:契約書だよ。そこに名前を書きな。
    名前を全角で> キン肉マン
湯婆婆:フン、キン肉マン というのかい。贅沢な名だねえ。
湯婆婆:今からおまえの名は 肉 だ。いいかい、肉 だよ。
湯婆婆:分かったら返事をするんだ、肉 !!

B:\SRC\C\TEXT>yubaba
湯婆婆:契約書だよ。そこに名前を書きな。
    名前を全角で> テリーマン
湯婆婆:フン、テリーマン というのかい。贅沢な名だねえ。
湯婆婆:今からおまえの名は マ だ。いいかい、マ だよ。
湯婆婆:分かったら返事をするんだ、マ !!

#考えたこと

  • 「入力文字列の○文字目だけを選んで表示する」のは簡単にできた。
  • 漢字は2バイトで1文字を表す。乱数で適当に文字(実際は○バイト目)を選んだ場合、偶数バイトが最初に来ると、漢字コードが正しく選ばれない状態になり、まったく違う漢字になってしまった。ので、乱数で発生させた数値は必ず奇数バイト目になるようにした。
  • srand()のランダムシードの作り方、もっと効率いい方法ないですか?私はプログラムの基本を全く知らない・・・。
  • もっといい方法があるかもしれません。includeファイルは、これでいいんでしょうか?検証する気がないです。
7
2
3

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
7
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?