RPG風名前入力画面
RPG風名前入力画面
補助会話装置の研究をしております。
そこで、RPGなどのゲームでよく見られるプレイヤーの名前入力画面のような物をC++で作成したいのですが当方C++の知識はHallowWorld程度で御座います。
現段階ではキーボードからの入力と実行画面での表示は完成させました。
しかしキーボードからの文字入力は無し、50音表と十字キー移動、決定/削除ボタンを実装したいので、御教授お願いいたします。
そこで、RPGなどのゲームでよく見られるプレイヤーの名前入力画面のような物をC++で作成したいのですが当方C++の知識はHallowWorld程度で御座います。
現段階ではキーボードからの入力と実行画面での表示は完成させました。
しかしキーボードからの文字入力は無し、50音表と十字キー移動、決定/削除ボタンを実装したいので、御教授お願いいたします。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: RPG風名前入力画面
足らない情報だらけなので、答えに困る状況です。
OSやら入出力装置、利用ライブラリなどを明記して頂かないと万の可能性を羅列するわけにも行きません。
それとC++と言って色々ありまして、C言語を勘違いしている可能性もあります。
OSやら入出力装置、利用ライブラリなどを明記して頂かないと万の可能性を羅列するわけにも行きません。
それとC++と言って色々ありまして、C言語を勘違いしている可能性もあります。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: RPG風名前入力画面
申し訳ありませんでした。
OSはWin7、開発環境はVisualStudio2013C++を使用しています。
インターフェイスはまだ考案しているので現段階では「十字、スペース、Backキー」を使用できれば良いです。
OSはWin7、開発環境はVisualStudio2013C++を使用しています。
インターフェイスはまだ考案しているので現段階では「十字、スペース、Backキー」を使用できれば良いです。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: RPG風名前入力画面
VisualStudio2013C++にも色々なライブラリ/API/フレームワークが利用できますので、もっと詳しくお願いします。
ざっと画面描画は5種類以上の方法がありえます。
VisualStudio2013C++であることと、C言語なのかC++であるかは別の問題でもあります。
ざっと画面描画は5種類以上の方法がありえます。
VisualStudio2013C++であることと、C言語なのかC++であるかは別の問題でもあります。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: RPG風名前入力画面
と、言うことですから、まずは今のプロジェクトを固めて添付した方が話が早い気がします。C++ビギナ さんが書きました:現段階ではキーボードからの入力と実行画面での表示は完成させました。
またはメインのソースを
written by へにっくす
Re: RPG風名前入力画面
すみません、これ以上詳しくとなると何処を参照して良いのか分からないです。
>VisualStudio2013C++であることと、C言語なのかC++であるかは別の問題でもあります。
えと、つまりVS2013C++ではC++は使えないということでしょうか
>>へにっくす さん
以下がソースです。
>VisualStudio2013C++であることと、C言語なのかC++であるかは別の問題でもあります。
えと、つまりVS2013C++ではC++は使えないということでしょうか
>>へにっくす さん
以下がソースです。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: RPG風名前入力画面
逆にややこしいのはVisualStudio2013C++にはC言語とC++とC++/CLIと言う3種類の言語が搭載されているためです。
あとAPI/フレームワークは標準関数/Win32API/MFC/.NET/DirectXなど沢山あります。
今回のは黒いウィンドウの標準関数って事でよろしいですか?
VC++6プロジェクトはVisualStudioC++6.0(1998年頃の大変古いもの)のプロジェクトのことなので、MFCの可能性が高いものです。
あとAPI/フレームワークは標準関数/Win32API/MFC/.NET/DirectXなど沢山あります。
今回のは黒いウィンドウの標準関数って事でよろしいですか?
VC++6プロジェクトはVisualStudioC++6.0(1998年頃の大変古いもの)のプロジェクトのことなので、MFCの可能性が高いものです。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: RPG風名前入力画面
徐々に理解してきました。
VC++のプロジェクトで作成します。
今回は黒いウィンドウでおねがいします。
すみません。VC++6は間違いでした。
VC++のプロジェクトで作成します。
今回は黒いウィンドウでおねがいします。
すみません。VC++6は間違いでした。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: RPG風名前入力画面
正確に書いておくとVC++のプロジェクトで言語はC++で、プロジェクトの種類はWin32コンソールアプリケーション、使用ライブラリは特になしで標準関数の範囲という事になります。
俗にいうCUI(キャラクタユーザインタフェース)でのプログラミングとなります。
「キャラクタユーザインタフェース - Wikipedia」
では、入力を考えず「あいうえお」を並べた画面は作れますか?
※ あと現在選んでいる位置を示すカーソルも表示して下さい。
俗にいうCUI(キャラクタユーザインタフェース)でのプログラミングとなります。
「キャラクタユーザインタフェース - Wikipedia」
では、入力を考えず「あいうえお」を並べた画面は作れますか?
※ あと現在選んでいる位置を示すカーソルも表示して下さい。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: RPG風名前入力画面
ただ表示させるだけ?でよろしいでしょうか
code
#include <stdio.h>
int main(void){
char str[30] = "あ い う え お";
printf("%s\n",str);
}
\code
code
#include <stdio.h>
int main(void){
char str[30] = "あ い う え お";
printf("%s\n",str);
}
\code
Re: RPG風名前入力画面
文字をキーボード入力する場合はカーソル移動できるのですが、ただ文字列を入力する場合はカーソルの表示すら間々なりません。
なにか特殊な関数が必要なのでしょうか
なにか特殊な関数が必要なのでしょうか
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: RPG風名前入力画面
カーソルをどう考えているか聞きたかったので聞いたわけですが、野暮ったい手ですが選択中の文字を[]で囲む方法があります。
[あ]って事ですね。すべてプログラムで操作が必要です。
あと、配列、文字列、漢字なので全角文字、if,for,whileなどの制御は理解されている必要があると思います。
[あ]って事ですね。すべてプログラムで操作が必要です。
あと、配列、文字列、漢字なので全角文字、if,for,whileなどの制御は理解されている必要があると思います。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: RPG風名前入力画面
このようになりました。
code
#include <stdio.h>
int main(void){
int a,flag=1;
char str[30] = "あいうえお";
while(flag==1){
scanf("%c",&a);
switch(a){
case '1':
printf("%s\n",str);
break;
case '2':
flag=0;
break;
}
}
}
\code
code
#include <stdio.h>
int main(void){
int a,flag=1;
char str[30] = "あいうえお";
while(flag==1){
scanf("%c",&a);
switch(a){
case '1':
printf("%s\n",str);
break;
case '2':
flag=0;
break;
}
}
}
\code
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: RPG風名前入力画面
codeタグの使い方が間違っていますので確認をお願いします。プレビューでの確認もなさって下さい。
http://dixq.net/board/board.html#k10
ちなみに、どんどんC言語化しているのですが問題ないのでしょうか?
C++に拘らないのならC言語で作ったほうが良いとは思いますが。
> あと、配列、文字列、漢字なので全角文字、if,for,whileなどの制御は理解されている必要があると思います。
こちらもどの程度出来るかも教えてください。
http://dixq.net/board/board.html#k10
ちなみに、どんどんC言語化しているのですが問題ないのでしょうか?
C++に拘らないのならC言語で作ったほうが良いとは思いますが。
> あと、配列、文字列、漢字なので全角文字、if,for,whileなどの制御は理解されている必要があると思います。
こちらもどの程度出来るかも教えてください。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: RPG風名前入力画面
すみません、上のプログラムだとVSで動かなかったです。
if,for,whileは簡単な電卓を作った際に覚えましたが、文字配列で使用する場合は理解できていません
if,for,whileは簡単な電卓を作った際に覚えましたが、文字配列で使用する場合は理解できていません
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: RPG風名前入力画面
> すみません、上のプログラムだとVSで動かなかったです。
私の所では動きます。やりたい意図が不明なプログラムではありますが。
C++の理解度やら、C++である必然性が不明です。
どこまでC++の機能を使う必要性があるかも不明ですね。
あと期限がまだ先なら、先走らずにじっくり取り組まれることをオススメします。
私の所では動きます。やりたい意図が不明なプログラムではありますが。
C++の理解度やら、C++である必然性が不明です。
どこまでC++の機能を使う必要性があるかも不明ですね。
あと期限がまだ先なら、先走らずにじっくり取り組まれることをオススメします。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: RPG風名前入力画面
恥ずかしながらあと2週間で形にしなければならないのです。
最終的に使いたいインターフェイスがC++での開発環境になっているので、それが理由です。
最終的に使いたいインターフェイスがC++での開発環境になっているので、それが理由です。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: RPG風名前入力画面
これから私が忙しくなるので、ちょっとサポートしつづけられ無さそうですね。
ちなみにC++でクラスを継承してとかまでのレベルを要求されるのなら軽く半年とか見てもらわないと難しいです。
C++をC++として使うとは、そういう事なので。
C言語に毛が生えた程度でしたら、そこまではかかりませんが2週間は短いですね。
ちなみにC++でクラスを継承してとかまでのレベルを要求されるのなら軽く半年とか見てもらわないと難しいです。
C++をC++として使うとは、そういう事なので。
C言語に毛が生えた程度でしたら、そこまではかかりませんが2週間は短いですね。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: RPG風名前入力画面
最低限やりたい事を纏めますと
50音表の表示、テキストカーソルの移動、文字決定、決定された文字を出力
なのですが、やはり2週間では難しいですよね
50音表の表示、テキストカーソルの移動、文字決定、決定された文字を出力
なのですが、やはり2週間では難しいですよね
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: RPG風名前入力画面
C言語の理解とある程度のプログラムの経験、C++らしさを求めなければ数時間もかからずに出来ますね。C++で熟練している人はC++で同様な時間で出来ます。
初心者の場合は、色んな所でつまずくのでどれだけの期間でできるかは未知数です。
周辺知識やら言語知識が足らない事で思ったものを組み立てらないので、ものすごく時間がかかります。
どこまでのC++知識を必要かC++ビギナさん自身が理解していないので、説明する側もどこまで説明すべきかわからないのが現状です。
初心者の場合は、色んな所でつまずくのでどれだけの期間でできるかは未知数です。
周辺知識やら言語知識が足らない事で思ったものを組み立てらないので、ものすごく時間がかかります。
どこまでのC++知識を必要かC++ビギナさん自身が理解していないので、説明する側もどこまで説明すべきかわからないのが現状です。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: RPG風名前入力画面
コードがこういう風に↓見えるようになっているかどうか
プレビューでちゃんと確認してください,と言われているのですよ.
プレビューでちゃんと確認してください,と言われているのですよ.
#include "stdafx.h"
#include <iostream>
#include <string>
#include <Windows.h>
//
int main( int argc, char **argv )
{
const int Nx = 5;
const int Ny = 5;
const std::string Chars[Ny][Nx] = {
"あ","か","さ","た","な",
"い","き","し","ち","に",
"う","く","す","つ","ぬ",
"え","け","せ","て","ね",
"お","こ","そ","と","の"
};
int PosX = 0;
int PosY = 0;
std::string CurrStr;
bool bRedraw = true;
while( 1 )
{
if( bRedraw )
{//show
bRedraw = false;
system( "cls" );
for( int y=0; y<Ny; y++ )
{
for( int x=0; x<Nx; x++ )
{
if( x==PosX && y==PosY )
{ std::cout << '[' << Chars[y][x] << ']'; }
else
{ std::cout << ' ' << Chars[y][x] << ' '; }
}
std::cout << std::endl;
}
std::cout << std::endl << CurrStr;
}
//key
if( GetAsyncKeyState( VK_ESCAPE ) )break;
if( GetAsyncKeyState( VK_UP ) )
{ PosY=(PosY>0 ? PosY-1 : Ny-1 ); bRedraw=true; }
else if( GetAsyncKeyState( VK_DOWN ) )
{ PosY=(PosY<Ny-1 ? PosY+1 : 0 ); bRedraw=true; }
else if( GetAsyncKeyState( VK_LEFT ) )
{ PosX=(PosX>0 ? PosX-1 : Nx-1); bRedraw=true; }
else if( GetAsyncKeyState( VK_RIGHT ) )
{ PosX=(PosX<Nx-1 ? PosX+1 : 0 ); bRedraw=true; }
else if( GetAsyncKeyState( VK_RETURN ) )
{ CurrStr+=Chars[PosY][PosX]; bRedraw=true; }
//wait
Sleep( 50 );
}
//
return 0;
}
Re: RPG風名前入力画面
usaoさん
ありがとうございます。すみません変な見間違いをしていました。
載せていただいたソースですが、「IntelliSense: ソース ファイルを開けません "targetver.h"」とエラーが出てしまいました。
ありがとうございます。すみません変な見間違いをしていました。
載せていただいたソースですが、「IntelliSense: ソース ファイルを開けません "targetver.h"」とエラーが出てしまいました。
Re: RPG風名前入力画面
あなたがどのような作業工程を経てそうなったのかわからないのと,
これまでそのようなエラーに遭遇したことが無いということもあり,さっぱり不明です.
・リビルドしてもダメですか?
・#include "stdafx.h"の行を取っ払ってみたらどうなりますか?
・そのエラーが出てる状況でもとりあえず実行だけはできたりとかしませんか?
#あと,前もって断っておきますが,
私の張ったコードでは いろいろと不足なハズです.
何かしらヒントにできればいいですね,程度のものですので.
これまでそのようなエラーに遭遇したことが無いということもあり,さっぱり不明です.
・リビルドしてもダメですか?
・#include "stdafx.h"の行を取っ払ってみたらどうなりますか?
・そのエラーが出てる状況でもとりあえず実行だけはできたりとかしませんか?
#あと,前もって断っておきますが,
私の張ったコードでは いろいろと不足なハズです.
何かしらヒントにできればいいですね,程度のものですので.
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: RPG風名前入力画面
usaoさん、ありがとうございます。
今後はusaoさんのコードを中心に話を進めて下さい。
今後はusaoさんのコードを中心に話を進めて下さい。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: RPG風名前入力画面
>usaoさん、ありがとうございます。
>今後はusaoさんのコードを中心に話を進めて下さい。
うーん,なんでしょう.
・このままノーヒント的進行では(失礼ながら)かなり厳しそうに見受ける のと
・2週間という期限が差し迫っているらしいこと
を考慮して
「そこそこ参考になりそうなもの」を提示させていただいた ということにすぎないのですよね.
「これだけが動くプログラムができれば終了」という練習問題的な話ではなくて
一機能(モジュール)として作らなければならないという話でしょうから
このサンプル然としたコードの中に,参考にできそうな要素(記述とか使ってる関数とか?)があれば
そこを足がかりにしてもらればまぁ…という程度というか.
なので,このコードについて意味がわからんとかいう箇所があるならば
(そうならないように なるべく平易に書いたつもりですが)
その説明くらいはしないでもないですが,
これ中心で進めていく,というのは違うような……?
#ところで この話にもっと適したキーボード入力取得用の関数って無いですかね.
何かキーが押されるまで処理が返らない&押されたキーの種類が返される ようなのがあれば
その方が楽そうなのですが…
>今後はusaoさんのコードを中心に話を進めて下さい。
うーん,なんでしょう.
・このままノーヒント的進行では(失礼ながら)かなり厳しそうに見受ける のと
・2週間という期限が差し迫っているらしいこと
を考慮して
「そこそこ参考になりそうなもの」を提示させていただいた ということにすぎないのですよね.
「これだけが動くプログラムができれば終了」という練習問題的な話ではなくて
一機能(モジュール)として作らなければならないという話でしょうから
このサンプル然としたコードの中に,参考にできそうな要素(記述とか使ってる関数とか?)があれば
そこを足がかりにしてもらればまぁ…という程度というか.
なので,このコードについて意味がわからんとかいう箇所があるならば
(そうならないように なるべく平易に書いたつもりですが)
その説明くらいはしないでもないですが,
これ中心で進めていく,というのは違うような……?
オフトピック
あと,何故
>ありがとうございます。
と言われるのかわかりません.
>ありがとうございます。
と言われるのかわかりません.
#ところで この話にもっと適したキーボード入力取得用の関数って無いですかね.
何かキーが押されるまで処理が返らない&押されたキーの種類が返される ようなのがあれば
その方が楽そうなのですが…
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: RPG風名前入力画面
「ありがとうございます」は、返答できなかったので代わりにありがとうございますって意味ですね。
> これ中心で進めていく,というのは違うような……?
どっか拠り所がないと進まないと思ったものですから。
C++ビギナさんのやりたい事もいまいち不明なままですから。
>#ところで この話にもっと適したキーボード入力取得用の関数って無いですかね.
> 何かキーが押されるまで処理が返らない&押されたキーの種類が返される ようなのがあれば
> その方が楽そうなのですが…
最終的に入力インターフェイスが変わるらしいのでこだわっても意味が無さそうです。
そっちの方が実際は大変そうなんですが。
> これ中心で進めていく,というのは違うような……?
どっか拠り所がないと進まないと思ったものですから。
C++ビギナさんのやりたい事もいまいち不明なままですから。
>#ところで この話にもっと適したキーボード入力取得用の関数って無いですかね.
> 何かキーが押されるまで処理が返らない&押されたキーの種類が返される ようなのがあれば
> その方が楽そうなのですが…
最終的に入力インターフェイスが変わるらしいのでこだわっても意味が無さそうです。
そっちの方が実際は大変そうなんですが。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: RPG風名前入力画面
>最終的に入力インターフェイスが変わるらしいのでこだわっても意味が無さそうです。
言われてみればそのとおりですね.
そこの部分の方式が 実際に使うもの と似ていた方が良さそうですね.
すなわち,
最終的な入力インターフェイス から得られる操作入力の形態:
例えば,今キーボードで代用していますが,それと同じように,{↑,↓,←,→,選択,…}みたいな操作種類選択の情報なのか,
マウスみたいに,現在座標とその場所に対するアクション(クリックとか) みたいな方式なのか…
みたいなことが先にわかっていた方がよさそうな気がしますね.
(誰かがコードを貼るにしても,その入力形態を踏まえた形のものになるでしょうし)
言われてみればそのとおりですね.
そこの部分の方式が 実際に使うもの と似ていた方が良さそうですね.
すなわち,
最終的な入力インターフェイス から得られる操作入力の形態:
例えば,今キーボードで代用していますが,それと同じように,{↑,↓,←,→,選択,…}みたいな操作種類選択の情報なのか,
マウスみたいに,現在座標とその場所に対するアクション(クリックとか) みたいな方式なのか…
みたいなことが先にわかっていた方がよさそうな気がしますね.
(誰かがコードを貼るにしても,その入力形態を踏まえた形のものになるでしょうし)
Re: RPG風名前入力画面
期限は今週中という感じでしょうか?
今の段階でそういう記述が出てくるというのは
std::string CurrStr;
って何ですか? というのが全く分かっていないということであり,相当まずいですね…
念のため,私が書いたやつの動作について説明しておきますと…
・CurrStrの(文字列としての)内容は最初は空っぽ("")です.
・Enterキーが押されたとき,CurrStrの末尾に,文字列Chars[PosY][PosX]の内容が付け加えられます.
例えば,カーソルが一番左上(PosX=0, PosY=0)の位置にあるとき, Chars[PosY][PosX]の内容は "あ" なので,
CurrStr の内容は結果として "あ" になります.
・例えば,さらにキー操作によってカーソル位置が PosX=4, PosY=3 に来たときにEnterを押せば,
CurrStr の末尾に "ね" が追加され,結果として "あね" になります.
…という具合です.
「一文字削除」 という場合,
現在の CurrStr の末尾の文字(列)がCurrStr から削除されるような操作を行えばよいわけです
(上記の例で言えば,"ね" が取り払われて CurrStrの内容が "あ" になればいい).
対して,あなたの書いたコードだと,(とりあえず -1って何? というのを置いといても)
CurrStr に「現在のCurrStrの内容と何ら関係ない定数(-1)」を代入 しているわけですから
現在の内容に即した結果 (ここで言うところの "あ") は得られないでしょう.
・文字列上で操作する場合,std::string のメソッドである erase() や substr() 等が使えるでしょう.
ただ, 動作の見た目(意味)的には 【末尾の「1文字」を削除】 であっても,
日本語とかの文字(「全角文字」と言えばいいのか?正しい言葉が何かはわからないけど)って,プログラム上の文字数(Byte数)がいくつなの?
っていう問題があるのでこれも注意が必要 (とりあえず現状 2byte と決め打ちしてしまってもいいのかも…?)
・削除操作をしようとした際に,CurrStrの内容が空である という場面もあり得るので,この点も注意が必要かと
std::stringの使い方等については検索なりされた方が早いと思います.
(今のままだと,このモジュールができても,結果の文字列を使う箇所のコーディングができなくなってしまうでしょうし)
今の段階でそういう記述が出てくるというのは
std::string CurrStr;
って何ですか? というのが全く分かっていないということであり,相当まずいですね…
念のため,私が書いたやつの動作について説明しておきますと…
・CurrStrの(文字列としての)内容は最初は空っぽ("")です.
・Enterキーが押されたとき,CurrStrの末尾に,文字列Chars[PosY][PosX]の内容が付け加えられます.
例えば,カーソルが一番左上(PosX=0, PosY=0)の位置にあるとき, Chars[PosY][PosX]の内容は "あ" なので,
CurrStr の内容は結果として "あ" になります.
・例えば,さらにキー操作によってカーソル位置が PosX=4, PosY=3 に来たときにEnterを押せば,
CurrStr の末尾に "ね" が追加され,結果として "あね" になります.
…という具合です.
「一文字削除」 という場合,
現在の CurrStr の末尾の文字(列)がCurrStr から削除されるような操作を行えばよいわけです
(上記の例で言えば,"ね" が取り払われて CurrStrの内容が "あ" になればいい).
対して,あなたの書いたコードだと,(とりあえず -1って何? というのを置いといても)
CurrStr に「現在のCurrStrの内容と何ら関係ない定数(-1)」を代入 しているわけですから
現在の内容に即した結果 (ここで言うところの "あ") は得られないでしょう.
・文字列上で操作する場合,std::string のメソッドである erase() や substr() 等が使えるでしょう.
ただ, 動作の見た目(意味)的には 【末尾の「1文字」を削除】 であっても,
日本語とかの文字(「全角文字」と言えばいいのか?正しい言葉が何かはわからないけど)って,プログラム上の文字数(Byte数)がいくつなの?
っていう問題があるのでこれも注意が必要 (とりあえず現状 2byte と決め打ちしてしまってもいいのかも…?)
・削除操作をしようとした際に,CurrStrの内容が空である という場面もあり得るので,この点も注意が必要かと
std::stringの使い方等については検索なりされた方が早いと思います.
(今のままだと,このモジュールができても,結果の文字列を使う箇所のコーディングができなくなってしまうでしょうし)
Re: RPG風名前入力画面
2回連続で削除操作とかテストしてみても正しく動作していますか?
(あと,erase()の戻り値をCurrStrに代入する必要は特にないと思う)
(あと,erase()の戻り値をCurrStrに代入する必要は特にないと思う)
Re: RPG風名前入力画面
お礼が大幅に遅くなってしまい申し訳ありませんでした。
無事審査も通り、晴れて合格です。大変お世話になりました。ありがとうございます。
二回連続削除の件ですが、若干修正いたしまして正常に動作してくれています。
無事審査も通り、晴れて合格です。大変お世話になりました。ありがとうございます。
二回連続削除の件ですが、若干修正いたしまして正常に動作してくれています。