元の三流解説は、
三流君ASP:配列の復習、2次元配列、Array関数で配列の初期化
↑を見て、笑ってやってください。
ブログに過去のソースコードをアップして、ブログの検索機能で利用してます(利用予定です)
※古くさいコードが多いです・・・
ソースコード
<%@LANGUAGE=VBScript%> <html> <head><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=x-sjis"> <title>配列にメッセージを代入して使う</title> </head> <body> <h2>配列にメッセージを代入して使う</h2> If文の羅列から、配列を使用した処理に変更してみた。<br> ポイントは、<br> Dim nMSGNO <Font Color='Green'>'メッセージの番号</Font><br> Dim strMSG(3) <Font Color='Green'>'メッセージ表示用の配列</Font><br> strMSG(1) = "アナタの勝ちです<br>" 'メッセージの代入<br> strMSG(2) = "引き分けです<br>"<br> strMSG(3) = "私(コンピュータ)の勝ちです<br>"<br> と、配列でメッセージ管理してみました。<br> <h3>じゃんけんゲーム</h3><br> <% 'ユーザー名が送られていたら、セッション変数にセットする D = Request.QueryString("UNAME") 'データを代入 If Len(D) <> 0 Then 'データあり Session("USERNAME") = D '名前の代入 End If 'パラメータをチェックする、セッション変数に名前が入っているか? USER_NAME = Session("USERNAME") 'Lenで変数の長さをチェックする If Len(Trim(USER_NAME)) = 0 Then '名前が未入力なら Call INPUT_NAME() '名前入力フォームの表示 Else D = Request.QueryString("DATA") 'データを代入(選択された手) If Len(D) = 1 Then 'データあり Call HANTEI(D) '判断用の関数を呼ぶ End If Call INPUT_FORM() '入力用のフォームを表示する、再度入力させる End If %> <hr> </body> </html> <% '名前入力フォームの表示 Sub INPUT_NAME() Response.Write "<HR>" Response.Write "<FORM ACTION='test065-1.asp' METHOD='GET'>" Response.Write "あなたのお名前は?<br>" Response.Write "<INPUT TYPE='text' NAME='UNAME'><br>" Response.Write "<INPUT TYPE='submit' VALUE='名前の登録'><br>" Response.Write "</FORM>" End Sub %> <% '入力フォームの表示(勝負する手を入力) Sub INPUT_FORM() Response.Write "<HR>" Response.Write "<FORM ACTION='test065-1.asp' METHOD='GET'>" Response.Write "<b>" & USER_NAME & "</b>さん、あなたの手は?<br>" Response.Write "<INPUT TYPE='RADIO' NAME='DATA' VALUE='1'>1.グー<br>" Response.Write "<INPUT TYPE='RADIO' NAME='DATA' VALUE='2'>2.チョキ<br>" Response.Write "<INPUT TYPE='RADIO' NAME='DATA' VALUE='3'>3.パー<br>" Response.Write "<INPUT TYPE='submit' VALUE='勝負する'><br>" Response.Write "</FORM>" End Sub %> <% '乱数を発生させて勝負する Sub HANTEI(strNO) 'ユーザーの手を受取り判断する Dim nCON 'コンピュータの手1~3の数値が入る Dim nPC 'ユーザーさんの手 Dim strTE(3) '(*1)配列変数を宣言 strTE(1) = "グー" '(*2)配列にメッセージを代入 strTE(2) = "チョキ" strTE(3) = "パー" Dim nMSGNO 'メッセージの番号 Dim strMSG(3) 'メッセージ表示用の配列 strMSG(1) = "アナタの勝ちです<br>" 'メッセージの代入 strMSG(2) = "引き分けです<br>" strMSG(3) = "私(コンピュータ)の勝ちです<br>" '入力値の判断、エラーならメッセージを表示させ抜ける 'If文で1,2,3以外を判断する If strNO <> "1" And strNO <> "2" And strNO <> "3" Then Response.Write "[" & strNO & "]は不正な入力です" Exit Sub '<--Exit Subを使用してここでプログラムを抜ける End If 'コンピュータの手を決定 Randomize ' 乱数発生ルーチンを初期化します。 nCON = Int((3 * Rnd) + 1) '1 から 3 までの乱数を発生させます。 '結果判断と表示 'ユーザーの手を表示する nPC = CInt(strNO) 'CInt関数で数値型に変換する Response.Write USER_NAME & "さんの手は、" Response.Write strTE(nPC) & "です<br>" '(*3)ここでnPC番目を表示 '(*4)同様にコンピュータの手を表示する Response.Write "コンピュータの手は" & strTE(nCON) & "です<br>" '結果の判断 'まず、引き分けを判断 If nPC = nCON Then nMSGNO = 2 '引き分け '次に自分が勝ちの手を判断 グーvsチョキ,チョキvsパー,パーvsグー If nPC = 1 And nCON = 2 Then nMSGNO = 1 'ユーザーの勝ちをセット If nPC = 2 And nCON = 3 Then nMSGNO = 1 If nPC = 3 And nCON = 1 Then nMSGNO = 1 'コンピュータが勝ちか判断 グーvsパー,チョキvsグー,バーvsチョキ If nPC = 1 And nCON = 3 Then nMSGNO = 3 'コンピュータの勝ちをセット If nPC = 2 And nCON = 1 Then nMSGNO = 3 If nPC = 3 And nCON = 2 Then nMSGNO = 3 '結果のメッセージを表示する(メッセージ番号を使用して) Response.Write strMSG(nMSGNO) End Sub %>
↑をテスト実行する→http://www.ken3.org/cgi-bin/test/test065-1.asp← 実行する
ソースコード
<%@LANGUAGE=VBScript%> <html> <head><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=x-sjis"> <title>2次元配列で結果を管理する</title> </head> <body> <h2>2次元配列で結果を管理する</h2> If文の羅列から、2次元配列で結果を管理する処理に変更してみた。<br> ポイントは、<br> <pre> '結果の判断 ' グー(1) チョキ(2) パー(3) ←コンピュータの手 'グー(1) 2引き分け 1勝ち 3負け 'チョキ(2) 3負け 2引き分け 1勝ち 'パー(3) 1勝ち 3負け 2引き分け '↑自分の手 '勝負の結果表を作る Dim strCHK(3, 3) '3x3の結果の表 strCHK(1, 1) = 2 : strCHK(1, 2) = 1 : strCHK(1, 3) = 3 strCHK(2, 1) = 3 : strCHK(2, 2) = 2 : strCHK(2, 3) = 1 strCHK(3, 1) = 1 : strCHK(3, 2) = 3 : strCHK(3, 3) = 2 </pre> と、<b>勝敗表</b>をそのまま<b>2次元の配列</b>にしてみました。<hr> <h3>じゃんけんゲーム</h3> <% 'ユーザー名が送られていたら、セッション変数にセットする D = Request.QueryString("UNAME") 'データを代入 If Len(D) <> 0 Then 'データあり Session("USERNAME") = D '名前の代入 End If 'パラメータをチェックする、セッション変数に名前が入っているか? USER_NAME = Session("USERNAME") 'Lenで変数の長さをチェックする If Len(Trim(USER_NAME)) = 0 Then '名前が未入力なら Call INPUT_NAME() '名前入力フォームの表示 Else D = Request.QueryString("DATA") 'データを代入(選択された手) If Len(D) = 1 Then 'データあり Call HANTEI(D) '判断用の関数を呼ぶ End If Call INPUT_FORM() '入力用のフォームを表示する、再度入力させる End If %> <hr> </body> </html> <% '名前入力フォームの表示 Sub INPUT_NAME() Response.Write "<HR>" Response.Write "<FORM ACTION='test065-2.asp' METHOD='GET'>" Response.Write "あなたのお名前は?<br>" Response.Write "<INPUT TYPE='text' NAME='UNAME'><br>" Response.Write "<INPUT TYPE='submit' VALUE='名前の登録'><br>" Response.Write "</FORM>" End Sub %> <% '入力フォームの表示(勝負する手を入力) Sub INPUT_FORM() Response.Write "<HR>" Response.Write "<FORM ACTION='test065-2.asp' METHOD='GET'>" Response.Write "<b>" & USER_NAME & "</b>さん、あなたの手は?<br>" Response.Write "<INPUT TYPE='RADIO' NAME='DATA' VALUE='1'>1.グー<br>" Response.Write "<INPUT TYPE='RADIO' NAME='DATA' VALUE='2'>2.チョキ<br>" Response.Write "<INPUT TYPE='RADIO' NAME='DATA' VALUE='3'>3.パー<br>" Response.Write "<INPUT TYPE='submit' VALUE='勝負する'><br>" Response.Write "</FORM>" End Sub %> <% '乱数を発生させて勝負する Sub HANTEI(strNO) 'ユーザーの手を受取り判断する Dim nCON 'コンピュータの手1~3の数値が入る Dim nPC 'ユーザーさんの手 Dim strTE(3) '(*1)配列変数を宣言 strTE(1) = "グー" '(*2)配列にメッセージを代入 strTE(2) = "チョキ" strTE(3) = "パー" Dim nMSGNO 'メッセージの番号 Dim strMSG(3) 'メッセージ表示用の配列 strMSG(1) = "アナタの勝ちです<br>" 'メッセージの代入 strMSG(2) = "引き分けです<br>" strMSG(3) = "私(コンピュータ)の勝ちです<br>" '入力値の判断、エラーならメッセージを表示させ抜ける 'If文で1,2,3以外を判断する If strNO <> "1" And strNO <> "2" And strNO <> "3" Then Response.Write "[" & strNO & "]は不正な入力です" Exit Sub '<--Exit Subを使用してここでプログラムを抜ける End If 'コンピュータの手を決定 Randomize ' 乱数発生ルーチンを初期化します。 nCON = Int((3 * Rnd) + 1) '1 から 3 までの乱数を発生させます。 '結果判断と表示 'ユーザーの手を表示する nPC = CInt(strNO) 'CInt関数で数値型に変換する Response.Write USER_NAME & "さんの手は、" Response.Write strTE(nPC) & "です<br>" '(*3)ここでnPC番目を表示 '(*4)同様にコンピュータの手を表示する Response.Write "コンピュータの手は" & strTE(nCON) & "です<br>" '結果の判断 ' グー(1) チョキ(2) パー(3) ←コンピュータの手 'グー(1) 2引き分け 1勝ち 3負け 'チョキ(2) 3負け 2引き分け 1勝ち 'パー(3) 1勝ち 3負け 2引き分け '↑自分の手 '勝負の結果表を作る Dim strCHK(3, 3) '3x3の結果の表 strCHK(1, 1) = 2 : strCHK(1, 2) = 1 : strCHK(1, 3) = 3 strCHK(2, 1) = 3 : strCHK(2, 2) = 2 : strCHK(2, 3) = 1 strCHK(3, 1) = 1 : strCHK(3, 2) = 3 : strCHK(3, 3) = 2 '結果を代入 nMSGNO = strCHK(nPC, nCON) '結果表の値を代入 '結果のメッセージを表示する(メッセージ番号を使用して) Response.Write strMSG(nMSGNO) End Sub %>
↑をテスト実行する→http://www.ken3.org/cgi-bin/test/test065-2.asp← 実行する
ソースコード
<%@LANGUAGE=VBScript%> <html> <head><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=x-sjis"> <title>2次元配列をArray関数で初期化する</title> </head> <body> <h2>2次元配列をArray関数で初期化する</h2> <b>2次元配列をArray関数で初期化して使ってみました。</b><br> ポイントは、<br> <pre> '勝負の結果表を作る strCHK = Array( "", Array( 0, 2, 1, 3 ), _ Array( 0, 3, 2, 1 ), _ Array( 0, 1, 3, 2 ) ) と、強引にArrayを多重化してみました。 で、値を参照するときは、 nMSGNO = strCHK(nPC, nCON) '結果表の値を代入 <b>ではなくて</b> nMSGNO = <b>strCHK(nPC)(nCON)</b> '結果表の値を代入 と書きます。 </pre> <h3>じゃんけんゲーム</h3> <% 'ユーザー名が送られていたら、セッション変数にセットする D = Request.QueryString("UNAME") 'データを代入 If Len(D) <> 0 Then 'データあり Session("USERNAME") = D '名前の代入 End If 'パラメータをチェックする、セッション変数に名前が入っているか? USER_NAME = Session("USERNAME") 'Lenで変数の長さをチェックする If Len(Trim(USER_NAME)) = 0 Then '名前が未入力なら Call INPUT_NAME() '名前入力フォームの表示 Else D = Request.QueryString("DATA") 'データを代入(選択された手) If Len(D) = 1 Then 'データあり Call HANTEI(D) '判断用の関数を呼ぶ End If Call INPUT_FORM() '入力用のフォームを表示する、再度入力させる End If %> <hr> </body> </html> <% '名前入力フォームの表示 Sub INPUT_NAME() Response.Write "<HR>" Response.Write "<FORM ACTION='test065-3.asp' METHOD='GET'>" Response.Write "あなたのお名前は?<br>" Response.Write "<INPUT TYPE='text' NAME='UNAME'><br>" Response.Write "<INPUT TYPE='submit' VALUE='名前の登録'><br>" Response.Write "</FORM>" End Sub %> <% '入力フォームの表示(勝負する手を入力) Sub INPUT_FORM() Response.Write "<HR>" Response.Write "<FORM ACTION='test065-3.asp' METHOD='GET'>" Response.Write "<b>" & USER_NAME & "</b>さん、あなたの手は?<br>" Response.Write "<INPUT TYPE='RADIO' NAME='DATA' VALUE='1'>1.グー<br>" Response.Write "<INPUT TYPE='RADIO' NAME='DATA' VALUE='2'>2.チョキ<br>" Response.Write "<INPUT TYPE='RADIO' NAME='DATA' VALUE='3'>3.パー<br>" Response.Write "<INPUT TYPE='submit' VALUE='勝負する'><br>" Response.Write "</FORM>" End Sub %> <% '乱数を発生させて勝負する Sub HANTEI(strNO) 'ユーザーの手を受取り判断する Dim nCON 'コンピュータの手1~3の数値が入る Dim nPC 'ユーザーさんの手 '配列にメッセージを代入 strTE = Array("", "グー", "チョキ", "パー") Dim nMSGNO 'メッセージの番号 'メッセージ表示用の配列 strMSG = Array("", "アナタの勝ちです<br>", "引き分けです<br>", _ "私(コンピュータ)の勝ちです<br>" ) '入力値の判断、エラーならメッセージを表示させ抜ける 'If文で1,2,3以外を判断する If strNO <> "1" And strNO <> "2" And strNO <> "3" Then Response.Write "[" & strNO & "]は不正な入力です" Exit Sub '<--Exit Subを使用してここでプログラムを抜ける End If 'コンピュータの手を決定 Randomize ' 乱数発生ルーチンを初期化します。 nCON = Int((3 * Rnd) + 1) '1 から 3 までの乱数を発生させます。 '結果判断と表示 'ユーザーの手を表示する nPC = CInt(strNO) 'CInt関数で数値型に変換する Response.Write USER_NAME & "さんの手は、" Response.Write strTE(nPC) & "です<br>" '(*3)ここでnPC番目を表示 '(*4)同様にコンピュータの手を表示する Response.Write "コンピュータの手は" & strTE(nCON) & "です<br>" '結果の判断 ' グー(1) チョキ(2) パー(3) ←コンピュータの手 'グー(1) 2引き分け 1勝ち 3負け 'チョキ(2) 3負け 2引き分け 1勝ち 'パー(3) 1勝ち 3負け 2引き分け '↑自分の手 '勝負の結果表を作る strCHK = Array( "", Array( 0, 2, 1, 3 ), _ Array( 0, 3, 2, 1 ), _ Array( 0, 1, 3, 2 ) ) '結果を代入 nMSGNO = strCHK(nPC)(nCON) '結果表の値を代入 '結果のメッセージを表示する(メッセージ番号を使用して) Response.Write strMSG(nMSGNO) End Sub %>
↑をテスト実行する→http://www.ken3.org/cgi-bin/test/test065-3.asp← 実行する
↑コードの三流解説は、
三流君ASP:配列の復習、2次元配列、Array関数で配列の初期化
を見て、笑ってやってください。
ASPの解説 トップページは
三流君ASPで遊ぶ、失敗する
です。こちらもよろしく・・・