三流君のソースコード置き場

ブログにソースコードをアップして、ブログの検索機能で利用してます(利用予定です)

よく検索されるキーワード: [VBA]/ [VBS]/ [CreateObject]/ [Excel]/ [ADO]


asp065.html 三流君ASP:配列の復習、2次元配列、Array関数で配列の初期化

元の三流解説は、
三流君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) = &quot;アナタの勝ちです&lt;br&gt;&quot; 'メッセージの代入<br>
strMSG(2) = &quot;引き分けです&lt;br&gt;&quot;<br>
strMSG(3) = &quot;私(コンピュータ)の勝ちです&lt;br&gt;&quot;<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で遊ぶ、失敗する
です。こちらもよろしく・・・

挨拶・自己紹介:
失敗続きのAB型の変わり者 :三流プログラマー Ken3です
フリーのエンジニア・個人事業主です・・と書くと聞こえはイイが(それとなくカッコよく聞こえるが)、 現在は小さな案件の受注請負 と 短期派遣 で 日々つつましく?ほそぼそと暮らしてます。
(※詳細は[三流君 三流プログラマーとは?]を見てください)


Ken3 ホームページ 目次

分類:HPを大きく分けると4つの柱(分類)です。
・[Excel/Access VBA]の解説
・[ASP(Active Server Pages)]の解説。
・[元コンビニ店長時代の話]が弟に巻き込まれ、失敗した脱サラ、畑違い?の仕事で失敗。
・[プログラマーの愚痴]では、あまり見せたくない三流プログラマーの内面かな。
三流君を踏み台にする
主に上記4つの分類でHP作成やメルマガの発行を行ってます。
※更新頻度が落ちていて情報の鮮度が悪いです。

三流解説動画の再生リスト
https://www.youtube.com/user/ken3video/playlists

本当に三流なんです(笑):たまにスゴイですねなんて言われることもありますが、
真実は→ [三流君の真実は...] ←を初めに見てくださるとわかると思います。
(からくりは、成功例↑しか載せてなくて ヒドイ失敗例はお蔵入り迷宮入りが多かったりします)