倉庫クエ用プログラム | もやしほーむ 倉庫クエ用プログラム | もやしほーむ

もやしほーむ

作成したプログラムの紹介や、日々の徒然について更新

倉庫クエ用プログラム

time 2022/04/09

倉庫クエ用プログラム

sponsored link

倉庫クエ(敵一覧)

ゲーム完美世界の倉庫クエの敵一覧を見るプログラムの紹介をします

これは、MMORPGの完美世界の中で、初心者~上級者までが苦労して集めるアイテムの一覧を集めるという趣旨のプログラムです。全体を公開したものではありませんが(多分)、こういったプログラムで作っているんだよというプログラムの勉強に使っていただけたらと思います。

特に、データベース周りが参考になるのではないでしょうか?

ファイル名:souko_quest.php

<?php
// DB接続用ファイルとGETとPOSTの値をチェックするファイルを読み込み
require_once __DIR__ . '/db_config.php';
require_once __DIR__ . '/get_post_check.php';
?>
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>倉庫クエアップデート</title>
    <link rel="icon" href="img/favicon.ico">
    <link rel="stylesheet" href="css/style.css">
</head>
<body>
    <div class="main">
        <table>
            <tr>
                <th>
                    <h2>倉庫クエ<?= $step; ?>(敵一覧)データ</h2>
                </th>
            </tr>
        </table>
        <p>
<?php
try {
    // DB接続開始
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    if (empty($search)) {
        // 検索ワードが設定されていない時のSQL文
        $sql = 'SELECT * FROM souko_kue WHERE step = ?';
        $stmt = $dbh->prepare($sql);
        $stmt->bindValue(1, $step, PDO::PARAM_INT);
    } else {
        // $drop_item_nameの部分検索を行って、該当するものがあるかをチェック
/*
        foreach ($drop_item_name as $key => $value) {
            if (str_contains($value, $search)) {
                $cnt = $key;
                break;
            }
*/
        // PHP7以前の場合はこちらの方法で
            if (preg_match('/'.$search.'/', $value)) {
                $cnt = $key;
                break;
            }
        }

        // 検索ワードが設定されている時のSQL文
        $sql = 'SELECT * FROM souko_kue WHERE step = ? and (drop_item = ? or drop_enemy like ? or drop_area1 like ? or drop_area2 like ?)';

        // あいまい検索用変数
        $search_like = '%' . $search . '%';

        // 各種DB接続に関する設定
        $stmt = $dbh->prepare($sql);
        $stmt->bindValue(1, $step, PDO::PARAM_INT);
        if (isset($cnt)) {
            $stmt->bindValue(2, $cnt, PDO::PARAM_INT);
        } else {
            $stmt->bindValue(2, NULL, PDO::PARAM_INT);
        }
        $stmt->bindValue(3, $search_like, PDO::PARAM_STR);
        $stmt->bindValue(4, $search_like, PDO::PARAM_STR);
        $stmt->bindValue(5, $search_like, PDO::PARAM_STR);
    }
    $stmt->execute();
    $result = $stmt->fetchAll(PDO::FETCH_ASSOC);

    echo '<table>' . PHP_EOL;
    echo '<tr>' . PHP_EOL;
    echo '<th>' . PHP_EOL;
    echo '<form method="get" action="souko_quest.php?step=' . htmlspecialchars($step, ENT_QUOTES) . '&search=' . htmlspecialchars($search, ENT_QUOTES) . '">' . PHP_EOL;
    echo '<input type="text" class="reset_place" name="search" value="' . htmlspecialchars($search, ENT_QUOTES) . '" size="22" maxlength="10">' . PHP_EOL;
    echo '<input type="hidden" name="step" value="' . htmlspecialchars($step, ENT_QUOTES) .'">' . PHP_EOL;
    echo '<input type="submit" value="検索">' . PHP_EOL;
    echo '<button class="reset">リセット</button>' . PHP_EOL;
    echo '</form>' . PHP_EOL;
    echo '</th>' . PHP_EOL;
    echo '</tr>' . PHP_EOL;
    echo '</table>' . PHP_EOL;
    
    echo '<table border="1">' . PHP_EOL;
    echo '<tr>' . PHP_EOL;
    echo '<th>ドロップアイテム</th><th>ドロップする敵</th><th>エリア1</th><th>エリア2</th><th>座標(付近)</th>' . PHP_EOL;
    echo '</tr>' . PHP_EOL;

    // 倉庫クエ(敵一覧データ)の表示
    foreach ($result as $row) {
        echo '<tr>' . PHP_EOL;
        echo '<td>' . $drop_item_name[(int)$row['drop_item']] . '</td>' . PHP_EOL;
        echo '<td>' . htmlspecialchars($row['drop_enemy']) . '</td>' . PHP_EOL;
        echo '<td>' . htmlspecialchars($row['drop_area1']) . '</td>' . PHP_EOL;
        echo '<td>' . htmlspecialchars($row['drop_area2']) . '</td>' . PHP_EOL;
        echo '<td>(' . htmlspecialchars($row['x'], ENT_QUOTES) . ',' . htmlspecialchars($row['y'], ENT_QUOTES) . ')↑' . htmlspecialchars($row['height'], ENT_QUOTES) . '</td>' . PHP_EOL;
        echo '</tr>' . PHP_EOL;
    }
    echo '</table>' . PHP_EOL;

    // DB領域の開放
    $dbh = null;
} catch (PDOException $e) {
    echo 'エラー発生:表示に失敗しました。';
    exit;
}
?>
        <table>
            <tr>
                <th>
                    <form method="post" action="index.html">
                        <input type="submit" value="戻る">
                    </form>
                </th>
            </tr>
        </table>
        </p>
    </div>
    <script src="js/jquery-3.3.1.min.js"></script>
    <script src="js/souko_quest.js"></script>
</body>
</html>

ファイル名:db_config.php

<?php
// DBのユーザー名とパスワード
$user = "moyasea_patako";
$pass = "hogehoge";

// DB接続(ローカル、ネットワーク切り替え)
$dbh = new PDO('mysql:host=localhost;dbname=moyasea_kanbi;charset=utf8', $user, $pass);
//$dbh = new PDO('mysql:host=mysql8.star.ne.jp;dbname=moyasea_kanbi;charset=utf8', $user, $pass);

データベースに接続する部分は、数回使い回すので、ファイルに切り出しました。一番上で、一回呼び出すだけで済むようになるので、便利な手法です。

ファイル名:get_post_check.php

<?php
// GETの値をチェックする
if (empty($_GET['step'])) {
    echo 'IDを正しく入力してください。';
    exit;
}
$step = (int)$_GET['step'];

// $stepの値により、$drop_item_nameに入れるデータを切り替える
switch ($step) {
case 1:
    $drop_item_name = ['冥獣の肉片', '呪術の皮', '元素の粉末', '柔軟な毛皮', '触角', 'サイの角'];
    break;
case 2:
    $drop_item_name = ['冥獣の鋭い爪', '丈夫な皮袋', '元素の破片', '鈍い爪', '蜜', '百草液'];
    break;
default:
    echo 'IDが正しくありません。';
    exit;
}

// 検索ワードがあるかどうかを調べる
if (isset($_GET['search'])) {
    $search = $_GET['search'];
} else {
    $search = NULL;
}

// POSTの値をチェックする
if (isset($_POST['id'])) {
    $id = $_POST['id'];
} else {
    $id = NULL;
}

getやpostでやり取りするデータの整合性を確認するためのファイルです。

ファイル名:style.css

body {
    background: #FFF;
}

.header h1 {
    color: #700;
    width: 100%;
    text-align: center;
}

.slideshow {
    width: 550px;
    margin: auto;
}

.slideshow img {
    width: 100%;
}

.main p,h2 {
    width: 80%;
    margin-left: auto;
    margin-right: auto;
}

.main table {
    margin-left: auto;
    margin-right: auto;
}

.main th,td {
    white-space: nowrap;
}

スタイルシートは苦手なので、お粗末ですみません。

ファイル名:souko_quest.js

$('.reset').on('click', function() {
    $('.reset_place').val('');
});

項目のリセットを行うためのJavaScriptです。JQueryで書いてあります。

bookfan 1号店 楽天市場店
¥3,740 (2022/09/21 03:59時点 | 楽天市場調べ)
\楽天ポイント5倍セール!/
楽天市場
\ポイント5%還元!/
Yahooショッピング

sponsored link

down

コメントする

コメントは日本語で入力してください。(スパム対策)




もやしほーむ

白川秋

白川秋

こんにちは。各種プラットフォームでのWordpress、EC-CUBEの使い方や、PHPプログラミングについて書いています。よろしくお願いいたします。



sponsored link

カテゴリー

表示できるコメントはありません。
2022年4月
 12
3456789
10111213141516
17181920212223
24252627282930