へなちょこ人工無能チャットは以下の二つのファイルから構成されています。

ジオシティーズでの設置上の注意点

設定後にブラウザでaiframe.htmを表示してみてください。
表示がおかしい場合は
  1. ブラウザ側の文字のエンコードを確認する。
  2. aiframe.htmとblankhtml.htmの両方がアップロードされているか確認する。

Top ↑

aiframe.htm

<html><!--へなちょこ人工無能ちゃっと 1997年7月15日:
	追加(formのonSubmit処理) 午後 03:54 00/05/14:written by CLONE-->
	<head>
	<script language="JavaScript">
	<!-- オブジェクト指向で作ってみました。・・・が、オブジェクト化がかなりいいかげんです。
		//この関数は指定したウインドウ(フレーム)に引数としてわたされたhtmlコードをかく汎用関数です
		function doWrite(WindowName,HtmlCode){
			WindowName.document.clear()
			WindowName.document.open("text/html")
			WindowName.document.write(HtmlCode)
			WindowName.document.close()
		}
		//Chatオブジェクトのword配列に発言を記憶させるメソッド
		function Memo(text){
			for(var i=19;i>=1;i--){
				this.word[i]=this.word[i-1]
			}
			this.word[0]=text
		}
		//Chatオブジェクトの表示メソッド
		function doDisplay(){
			var HtmlCode
			HtmlCode ="<html>"
			HtmlCode+="<head>"
			HtmlCode+="<title>へなちょこ人工知能ちゃっと</title>"
			HtmlCode+="</head>"
			HtmlCode+="<bo"+"dy bgcolor=\"#a1fe9f\" text=\"#000000\" link=\"#ff0000\" vlink=\"#ff0000\" alink=\"#FF0000\">"
			HtmlCode+="<a href=\"JavaScript:parent.CommentButtonOnClick(\'\')\">[リロード]</a><hr>"
			for(var i=0;i<=19;i++){
				HtmlCode+=this.word[i] + ""
			}
			HtmlCode+="</bo"+"dy>"
			HtmlCode+="</html>"			
			doWrite(parent.Display,HtmlCode)
		}
		//Chatオブジェクトの定義
		function makeChat(){
			//内部変数
			this.word= new Array(19)
			//メソッド
			this.Memo=Memo
			this.doDisplay=doDisplay
			return this
		}
		//チャット参加メソッド
		function JoinChat(){
			Chat.Memo("<b><font color=\"0000ff\">管理人</font></b> > <font color=\"#dd0000\"><b><font size=\"+2\">"+ this.name +"</font>さん、おいでやすぅ。</font></b><hr>")
		}
		//チャット発言メソッド
		function Say(text){
			strGT=(this.adress!="")? "<a href=\"mailto:" + this.adress + "\"> |></a>":" >"
			strColor=(this.color!="")? this.color:"red"

			Chat.Memo("<b><font color="+ strColor +">"+ this.name +"</font></b>" + strGT + " <b>"+ text +"</b><hr>")
		}
		//チャット退室メソッド
		function LeaveChat(){
			Chat.Memo("<font color=\"blue\"><b>管理人</b></font> > <b><font color=\"#dd0000\"><font size=\"+2\">"+ this.name +"</font>さん、またきておくれやすぅ。</font></b><hr>")
		}
		//Parsonオブジェクトの定義
		function makeParson(name,color,adress){
			//プロパティ
			this.name=name
			this.color=color
			this.adress=adress
			//メソッド
			this.JoinChat=JoinChat
			this.Say=Say
			this.LeaveChat=LeaveChat
		}
		//汎用(?)タイマーオブジェクトの定義
		//タイマー始動メソッド
		function Start(){
			//タイマーが作動しているときは停止させる
			if (this.ID!=null){
				this.Stop()
			}
			//タイマーの寿命が尽きているときは復活させる
			if (this.life<=0){
				this.life=this.LIFE
			}
			this.ID=setTimeout(this.name + ".doEvent()",this.interval)
		}
		//タイマー停止メソッド
		function Stop(){
			//タイマーが動いているなら停止させる
			if (this.ID!=null){
				clearTimeout(this.ID)
				this.ID=null
			}
		}
		//タイマーイベント(内部メソッド)
		function doEvent(){
			this.ID=null
			eval(this.event)

			//タイマーの寿命を減らす
			this.life--
			if (this.life>0){
				this.Start()
			}
		}
		//タイマーオブジェクトの定義
		//注:タイマーオブジェクトを生成するときはオブジェクト名とnameプロパティを一致させてください
		//例:Timer=new makeTimer("Timer","alert('サンプル')",5000)
		//     ↑                   ↑
		//     これらの部分を一致させてください
		function makeTimer(name,event,interval,life){
			//内部変数
			this.ID=null
			this.name=name
			this.LIFE=(life==null)? 0:life
			//プロパティ
			this.event=event
			this.interval=interval
			this.life=(life==null)? 0:life
			//メソッド
			this.Start=Start
			this.Stop=Stop
			//内部メソッド
			this.doEvent=doEvent
			return this
		}
		//チャットオブジェクトとユーザーとしーぷ(人工無能)とタイマーオブジェクトを生成
		Chat=new makeChat
		User=new makeParson("","","")
		Sheep=new makeParson("しーぷ","#0099ff","")
		Timer=new makeTimer("Timer","if(Timer.life>1){Reactions(User.name);Chat.doDisplay()}else{doError()}",20000,10)
		//グローバル変数の宣言
		var refTime=0
		//しーぷとダミーキャラの反応
		function Reactions(name) {
			var Rnd=Math.random()
			if (Rnd<=0.05){
				Sheep.Say("・・・・・")
			} else if (Rnd<=0.1) {
				Sheep.Say("ふ〜ん♪、それで?")
			} else if (Rnd<=0.15) {
				Sheep.Say("ファイナルフュージョン承認!!!!!!!!。プログラムドライブっ!!!!!!!!(←ガオガイガー知らないと超意味不明)")
			} else if (Rnd<=0.2) {
				Sheep.Say("(・・?)はぅ。")
			} else if (Rnd<=0.3){
				Sheep.Say("ふふふ。にやり、キュピィ〜〜ン(←目が光る!)")
			} else if (Rnd<=0.35){
				Sheep.Say("ほーほぉー。")
			} else if (Rnd<=0.4) {
				Sheep.Say("ぽりぽり<~(・・;)")
			} else if (Rnd<=0.5) {
				Sheep.Say("ちゅぱっちゅぷるぺろかふぇぜり〜♪。ぶるーまうんてんかふぇぜり〜♪")
			} else if (Rnd<=0.6) {
				Sheep.Say("うびょぽろ〜ん(←意味不明)")
			} else if (Rnd<=0.7) {
				Sheep.Say("ほぇほぇ。そうなんですか。>"+ name +"さん")
			} else if (Rnd<=0.8) {
				Sheep.Say("たまにはうなぎでも食いたいにゃ。>"+ name +"さん")
			} else if (Rnd<=0.9) {
				Sheep.Say("りろうど")
			} else if (Rnd<=0.95) {
				Sheep.Say("なるほど。>"+ name +"さん")
			} else if (Rnd<=1) {
				Clone=new makeParson("クローン","red","clone-01@geocities.co.jp")
				Clone.JoinChat()
				Sheep.Say("いぇ〜い♪こんちわ>クローンさん")
				Clone.Say("いぇ〜い♪、こちらこそ、こんにちわ")
				Sheep.Say("うびょぽろ〜ん(←意味不明)")
				Clone.Say("ここってたまには人がくるんですね。>"+ name +"さん")
				Clone.Say("時間がないのでこれにて失礼。じゃ。")
				Clone.LeaveChat()
				Sheep.Say("ばぃば〜い、またね〜♪>クローンさん")
			}
		}
		//Inputフレームを初期化する関数
		function InputFrameInitialize(){
			var HtmlCode

			HtmlCode ="<html>"
			HtmlCode+="<head>"
			HtmlCode+="<title>へなちょこ人工無能ちゃっと</title>"
			HtmlCode+="</head>"
			HtmlCode+="<bo"+"dy bgcolor=\"#a1fe9f\" text=\"#000000\" link=\"#229955\" vlink=\"#999933\" alink=\"#ff0000\">"
			HtmlCode+="<form onSubmit=\"parent.JoinButtonOnClick(this);return false\">"
			HtmlCode+="<font size=+2><b>へなちょこ人工無能ちゃっと</b></font>"
			HtmlCode+="<input type=\"button\" name=\"Join\"value=\"チャットに参加する\" onClick=\"parent.JoinButtonOnClick(this.form)\">"
			HtmlCode+="<input type=\"reset\" value=\"リセット\">"
			HtmlCode+="<p>"
			HtmlCode+="おなまえ:<input type=\"text\" name=\"_name\" size=\"20\" maxlength=\"20\">"
			HtmlCode+="認証コード:<input type=\"text\"size=\"20\"><br>"
			HtmlCode+="いろ?:<input type=\"text\" name=\"_color\" size=\"10\"><br>"
			HtmlCode+="メールアドレス:<input type=\"text\" name=\"_adress\" size=\"30\"><br>"
			HtmlCode+="オートクリアー(Windows):"
			HtmlCode+="<select name=\"auto_clear\">"
			HtmlCode+="<option value=\"on\" selected>ON"
			HtmlCode+="<option value=\"off\">OFF"
			HtmlCode+="</select><br>"
			HtmlCode+="自動リロードさせたくない(手動で操作する)場合は、時間を0に設定してくださいね。<br>"
			HtmlCode+="自動リロード時間:"
			HtmlCode+="<select name=\"reftime\">"
			HtmlCode+="<option value=\"0\">0秒"
			HtmlCode+="<option value=\"20\" selected>20秒"
			HtmlCode+="</select><br>"
			HtmlCode+="チャットウィンドウ:20行<br>"
			HtmlCode+="</form>"
			HtmlCode+="<p><ul>"
			HtmlCode+="<li>上下を分けている境界線は自由に移動できます。"
			HtmlCode+="</ul>"
			HtmlCode+="</bo"+"dy>"
			HtmlCode+="</html>"

			doWrite(parent.Input,HtmlCode)
		}
		//フレームを初期化する関数
		function FramesOnLoad(){
			//初期 Inputフレーム生成
			InputFrameInitialize()

			//初期 Displayフレーム生成(ダミーキャラを生成→ダミーキャラが発言→表示)
			var Noname=new makeParson("匿名希望","red","")
			Noname.JoinChat()
			Sheep.Say("いぇ〜い♪こんちわ>匿名希望さん")
			Noname.Say("こんちわ")
			Reactions(Noname.name)
			Noname.Say("単位とらんと卒業にひびくっす")
			Reactions(Noname.name)
			Noname.Say("単位くれくれ大作戦なのだ。")
			Reactions(Noname.name)
			Noname.Say("のーてんきだねぇ〜。>しーぷ")
			Reactions(Noname.name)
			Noname.Say("さすがクローンひつじ")
			Reactions(Noname.name)
			Noname.Say("某ちゃっとでタグを閉じ忘れてえらいことに・・・")
			Reactions(Noname.name)
			Noname.Say("チャットでフォームタグはやめようね")
			Reactions(Noname.name)
			Noname.Say("じゃ。そろそろかえるね。")
			Reactions(Noname.name)
			Noname.LeaveChat()
			Sheep.Say("ばぃば〜い、またね〜♪>匿名希望さん")
			Chat.doDisplay()
		}
		//参加ボタンが押されたときのイベント
		function JoinButtonOnClick(form){
			//ユーザーのデータを入力
			User.name=(form._name.value!="")? form._name.value:"ななしのごんべ"
			User.color=form._color.value
			User.adress=form._adress.value

			var HtmlCode
			var strOnClick=""
			if (form.auto_clear.options[form.auto_clear.selectedIndex].value=="on"){
				strOnClick=";document.forms[0]._comment.value=\'\'"
			}
			refTime=form.reftime.options[form.reftime.selectedIndex].value
			var strTime
			if (refTime==0){
				strTime="手動"
			} else {
				strTime="弐拾秒"
				Timer.Start()
			}
			//発言 Inputフレーム生成
			HtmlCode ="<html>"
			HtmlCode+="<head>"
			HtmlCode+="<title>へなちょこ人工無能ちゃっと</title>"
			HtmlCode+="</head>"
			HtmlCode+="<bo"+"dy bgcolor=\"#a1fe9f\" text=\"#000000\" link=\"#ff0000\" vlink=\"#ff0000\" alink=\"#ff0000\">"
			HtmlCode+="[<a href=\"http://www.a-web.co.jp/~yui/\"target=\"_parent\">ゆいさんとこ</a>][<a href=\"http://www.ns.kogakuin.ac.jp/cgi-bin/cgiwrap/~a196146/robot.cgi\">フロスト君とこ</a>][<a href=\"http://www.synapse.or.jp/~takeku/chat/\"target=\"_parent\">たっくさんとこ</a>][<a href=\"http://www.alles.or.jp/~kaze/\"target=\"_parent\">えりすさんとこ</a>][<a href=\"http://www.ksc.co.jp/keiji/chat1.htm\"target=\"_parent\">おかしな人々</a>]<br>"
			HtmlCode+="<form onSubmit=\"parent.CommentButtonOnClick(this._comment.value)"+ strOnClick +";return false\">"
			HtmlCode+="<input type=\"button\" value=\"リロード / ちゃっと de 発言\" onClick=\"parent.CommentButtonOnClick(this.form._comment.value)"+ strOnClick +"\"><input type=\"reset\" value=\"消す\"> おなまえ:<b>" + User.name + "</b> リロード:<b>"+ strTime +"</b><p>"
			HtmlCode+="発言:<input type=\"text\"  size=\"50\"name=\"_comment\"><br>"
			HtmlCode+="</form>"
			HtmlCode+="<p>"
			HtmlCode+="<table>"
			HtmlCode+="<tr>"
			HtmlCode+="<th>"
			HtmlCode+="会話ログ:20行<br>"
			HtmlCode+="</th>"
			HtmlCode+="<th>"
			HtmlCode+="<form>"
			HtmlCode+="<input type=\"button\" value=\"退室する\" onClick=\"parent.LeaveButtonOnClick()\">"
			HtmlCode+="</form>"
			HtmlCode+="</th>"
			HtmlCode+="</tr>"
			HtmlCode+="</table>"
			HtmlCode+="<p>上下を分けている境界線は自由に移動できますよ。<br>"
			HtmlCode+="何も書かないで発言ボタンを押すとリロードできます。<br>"
			HtmlCode+="おみくじモード・富くじモード搭載!。「おみくじ」・「とみくじ」と発言すると反応します<br>"
			HtmlCode+="</bo"+"dy>"
			HtmlCode+="</html>"

			doWrite(parent.Input,HtmlCode)

			//発言 Displayフレーム生成(Userがチャットに参加→表示→「しーぷ」が反応)
			User.JoinChat()
			Chat.doDisplay()
			var Rnd=Math.random()
			if (Rnd<=0.333){
				Sheep.Say("いぇ〜い♪こんちわ>"+ User.name +"さん")
			} else if (Rnd<=0.666){
				Sheep.Say("こんにちわぁ♪>"+ User.name +"さん")
			} else if (Rnd<=1){
				Sheep.Say("ちわぁ。三河屋ですぅ(意味不明)>"+ User.name +"さん")
			}
		}
		//発言ボタンが押された時のイベント(Userが発言→表示→「しーぷ」が反応)
		function CommentButtonOnClick(comment){
			if (comment!=""){
				User.Say(comment)
				Chat.doDisplay()
				//エラーについて
				if (comment.indexOf("エラー")!=-1||comment.indexOf("えらー")!=-1||comment.indexOf("error")!=-1){
					Sheep.Say("手動リロードにすればエラー出ないよん。---<a href=\"JavaScript:parent.InputFrameInitialize();parent.Sheep.Say(parent.User.name +'さん、早く戻ってきてね♪。')\">戻って手動にする</a>---")
				//おみくじモード
				} else if (comment.indexOf("おみくじ")!=-1 ||comment.indexOf("御神籤")!=-1){
					var Rnd=Math.random()
					if (Rnd<=0.1){
						Sheep.Say("らっき〜♪ 。大吉ですぅ")
					} else if (Rnd<=0.2) {
						Sheep.Say("(・・?)はぅ。・・・大凶・・・最悪(ーー;;;;;;;;;)")
					} else if (Rnd<=0.3){
						Sheep.Say("ほーほぉー。中吉です")
					} else if (Rnd<=0.4) {
						Sheep.Say("小吉<~(・・;)")
					} else if (Rnd<=0.99) {
						Sheep.Say("げ。・・・凶だ。(・_・)")
					} else if (Rnd<=1) {
						Sheep.Say("こっこれは?・・・・(おそるおそる見る)・・・ふにゃぐるぴゃぐぅ!!!!!!(←意味不明)")
					}
				//富くじモード
				} else if (comment.indexOf("とみくじ")!=-1 ||comment.indexOf("富籤")!=-1 ||comment.indexOf("富くじ")!=-1) {
					var Rnd=Math.random()
					if (Rnd<=0.1){
						Sheep.Say("大当たりぃ〜♪ 。"+ User.name +"さん、見事に当選。賞金を送るので至急しーぷのところにクレッジトカ−ドの番号をメールしてください。(番号さえわかれば・・くっくっく)")
					} else if (Rnd<=0.2) {
						Sheep.Say("おめでたう!。"+ User.name +"さん、10000人民元があなたに当たりました。つきましてはあなたの銀行口座名と口座番号、暗証番号を至急しーぷにメールしてください。(暗証番号がわかれば・・・ぐふふ:核爆)")
					} else if (Rnd<=0.3){
						Sheep.Say("小吉ですぅ。・・・え?。とみくじ?。うーんとううーんと・・・・おおはずれ〜♪")
					} else if (Rnd<=0.6) {
						Sheep.Say("おしい!!一桁違いでした、"+ User.name +"さん。というわけで当選金は無しです。")
					} else if (Rnd<=0.9) {
						Sheep.Say("ふみゅ、"+ User.name +"さんの番号は当選番号にかすりもしなかったわ。ま、人生こんなもんよね。")
					} else if (Rnd<=1) {
						var tmpStr="え〜っとぉ。富籤(とみくじ)って言うのは、江戸時代に流行したくじのことで、"
						tmpStr+="富札っていうものをいっぱい売って、富札と同じ数の番号札を箱に入れて、"
						tmpStr+="箱にあけた小さい穴から錐を突き入れて刺さった札が当たりの番号になるの。"
						tmpStr+="お寺とか神社の修理費をかせぐために寛永のころから公認になったんだって。"
						tmpStr+="・・・それ以前は未公認でやってたってことね(・・;)。"
						tmpStr+="江戸では谷中感応寺・目黒のお不動さん・湯島の天神さんでやってた富籤が"
						tmpStr+="三富って呼ばれて有名だったの。お寺とかが幕府の公認でやってたのを本富って言ってぇ、"
						tmpStr+="本富の当たり番号を予想してお金を賭ける賭博のことを影富って呼んでたの。"
						tmpStr+="それでね、影富とかでギャンブル熱が高まってきたから、こりゃいかんって天保十三年(1842年)に"
						tmpStr+="幕府は富籤を禁止にしちゃったの。富籤って富突とか福富とか見徳とも呼ばれてたんだって。"
						tmpStr+="・・・・・え?。話が長い?。ごめ〜ん。じゃこのへんでやめるね♪。"
						Sheep.Say(tmpStr)
					}

				//あいづちモード
				} else {
					Reactions(User.name)
				}
			} else {
				Chat.doDisplay()
			}
			//タイマーが生きているなら寿命を減らす
			if (Timer.life>0){
				Timer.life--
				if (Timer.life<1){
					doError()
				}
			//タイマーが死んでいるなら生き返らせる
			} else if (refTime!=0){
				Timer.Start()
			}
		}
		//退室ボタンが押されたときのイベント
		function LeaveButtonOnClick(){
			User.LeaveChat()

			var Rnd=Math.random()
			if (Rnd<=0.33){
				Sheep.Say("ばぃば〜い、またね〜♪>"+ User.name +"さん")
			} else if (Rnd<=0.66){
				Sheep.Say( User.name +"さん、いいひとだったのに。惜しい人をなくしたもんだ。・・・へ?。死んでない?帰るだけ?。")
			} else if (Rnd<=1){
				Sheep.Say("さよ〜ならぁ。~~\(TT) >"+ User.name +"さん")
			}
			Chat.doDisplay()
			InputFrameInitialize()
			Timer.Stop()
		
			var tmpID=setTimeout("Infomation()",2500)

		}
		//退室後、このチャットについての説明を表示するイベント
		function Infomation(){
			var Clone=new makeParson("クローン","red","clone-01@geocities.co.jp")
			Clone.JoinChat()
			Clone.Say("人工無能しーぷとの会話はいかがだったでしょうか?")
			Clone.Say("このチャットは、すべてJavaScriptで処理しています")
			Sheep.Say("ほーほぉー")
			Clone.Say("つまり、これはCGIをつかっていない疑似チャットです(←チャットと呼べるかはちょっと疑問)")
			Sheep.Say("ほーほぉー")
			Clone.Say("ソースコードみればすぐばれちゃいますけど")
			Sheep.Say("ぽりぽり<~(・・;)")
			Clone.Say("ここに何人ひっかかるかな。わくわく。")
			Sheep.Say("ぽりぽり<~(・・;)")
			Clone.Say("じゃ。")
			Clone.LeaveChat()
			Sheep.Say("ばぃば〜い、またね〜♪>クローンさん")
			Chat.doDisplay()
		}
		//疑似サーバーエラーを発生させる関数
		function doError(){
			var HtmlCode
			HtmlCode ="<html><head>"
			HtmlCode+="<title>500 Internal Server Error</title>"
			HtmlCode+="</head><bo"+"dy>"
			HtmlCode+="<h1>Internal Server Error</h1>"
			HtmlCode+="The server encountered an internal error or"
			HtmlCode+="misconfiguration and was unable to complete"
			HtmlCode+="your request.<P>"
			HtmlCode+="Please contact the server administrator,"
			HtmlCode+=" clone-01@geocities.co.jp and inform them of the time the error occurred,"
			HtmlCode+="and anything you might have done that may have"
			HtmlCode+="caused the error.<P>"
			HtmlCode+="</bo"+"dy></html>"
			
			doWrite(parent.Display,HtmlCode)
		}
	//関数終わり-->
	</script>
	<title>へなちょこ人工無能ちゃっと</title>
	</head>
	<frameset rows="30%,*" bordercolor="pink" onLoad="FramesOnLoad()">
		<frame src="blankhtml.htm" name="Input">
		<frame src="blankhtml.htm" name="Display">
	</frameset>

	<noframes>
		<body>
		ゆいちゃっとのスクリプトは、オリジナルのものです。(非公開)
		レスキューさんのシェアウェアWebCHAT7.1のインターフェイス(外観)を
		そっくり真似しています。元々、ゆいちゃっとは、7.1を用いていたのですが
		サーバへの負担等から、一時、実行停止処分を受けまして...結局、自分で書き直すことにしました。
		...オリジナルっといっても、中身は、実は、チャンドラさんのHAL9000チャット
		と、箕畑さんのフリーのBBSと、chatproを足して割ったもの...なんですけどぉ。..とりあえず、それらは、参考にさせて頂いたということで....感謝いたしております。(苦笑)


		<p>こんにちは。製作者のクローンと申します。上のコメントはゆいさんのです。このチャットもどきは、
		ゆいちゃっとの外観をぱくってます。(ということは、レスキューさんのWebCHAT7.1の外観もぱくってる?)<br>
		勝手に流用してすみません、ゆいさん。<br>
		でも、スクリプトはわたしのオリジナルです。<br>
		この文章を見てるって事はフレーム未対応かスクリプトエラー(←可能性大&原因不明)ですね。<br>
		ネットスケープナビゲータ2.xだとうまく動かないです。ビルトインのArrayコンストラクタと<br>
		Mathオブジェクトのrandomメソッド使ってますから。<br>
		
		
		
		<p>追伸:なるべく新しいバージョンのブラウザで見てね。
		</body>
	</noframes>
</html>

Top ↑

blankhtml.htm

<html>
	<head>
		<title>Blank html document</title>
	</head>
	<body bgcolor="#c0c0c0">
	</body>
</html>

もどる
∧∧
(◎←)
((( )))
- -

This page hosted by Geocities-Japan
Get your own Free Home Page