20191008のC#に関する記事は9件です。

XAMLで分岐

XAMLで分岐したいときは、DataTrigger

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

コンボの中身から一項目だけ削除したい

 LendPaterns = _NameService.GetCodeName(NameSegmentCode.lend_patern);
              var yyy = LendPaterns.Where(x => x.Code == ((int)Const.LendPatern.xxx).ToString()).SingleOrDefault();
              LendPaterns.Remove(yyy);

GetCodeNameで取ってきた値(コンボ)の中からxxxだけ削除したい

(int)Const.LendPatern.xxx).ToString()).SingleOrDefault()

xxxはConstの中で数字として値を持っている(xxx = 2 とか)
(int)を書かなかったらxxxという名称が取れてきてしまうから名称ではなくて2をとってきたい。
(int)を書くことによって数字をとることが出来る。

今回は1件だけ値が取れてくるからSingleOrDefault()を忘れずに書いて型を決める。
※型がList<>の場合は必要ない。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Unityを2019.2.3fにアップデートしたら、謎現象が発生する(原因不明のままだけど大したことない)

アップデートした

UnityHubを使ってインストール&起動

すでにご存知とは思いますが、
UnityHubを使って新しいバージョンを追加して、
そのバージョンで既存のプロジェクトを開いて動かした感じです。
バージョンは、
UnityHub 1.6.1
Unityバージョン 2018.2.17f1 → 2019.2.3f1
image.png

割と新しめにしてみました。

謎現象発生

とりあえず、何事もなくデバッグできたので、iOSで出力しようということに。
すると、必ずではないものの、ビルド中にこんなエラーが。
image_2019_10_8.png

エラー内容を見る限り、
フォルダへのアクセスが拒否されましたって内容。
でも、実はそのフォルダ、Unityで選択して、ビルド中にはそのあたりに触れないでいたもの。
結果的に、フォルダごと消えていて、「多分自分で消したくせに拒否された」ってエラーを吐く不思議。

空のフォルダに入れていたので、特に影響はなく、再度ビルドすると問題なく出力されましたとさ。
でも、同じことが再度発生したので、ビルドは必ず空フォルダにやっといたほうがいいよ…ということで。

おしまい。

2019にアップデートして、やりたかったこととか

もう簡潔に、
デバイスの明るさを取得して調整、ってのをアプリ側でやりたくて、
その簡単な機能が2019になってやっと搭載されたから。

Screen.brightness(set / get プロパティ。0.0f ~ 1.0fの値をとる)

これだけ。

2019にアップデートして、動作変わって困ったこととか

2019にアップデートすると、.netFramework4.6.1以降にしないとVS側はまともに動かないっぽい。(アップデートしてないので、VSCodeで組んでる)
それと、PlayerSettingsがEditから消えてしまって、パッケージマネージャー( 新規 )の中に動いたので、
Buildsettingsを表示して、PlayerSettingsボタンを押して表示するようになったよ、ぐらいかな。

アップデートしてもエラーが出ないっていうのはえらい。これはホントに。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Java(while文)基本問題

もう一度基本を見直すために、過去にやったJavaのwhile文問題のアウトプット

問1

サイコロを2個ふるよぞろ目が何回目にでるかな?

[実行例]

1回目(2,3) 2回目(3,2) 3回目(4,4) 3回目にぞろ目がでました!

[解答例]
import java.util.*;
public class Main{
    public static void main(String[] args){
        Random rand=new Random();
        int count=0;
        while(true){
            count++;
            int dice1=rand.nextInt(6)+1;
            int dice2=rand.nextInt(6)+1;
            System.out.printf("%d回目(%d,%d)%n",count,dice1,dice2);
            if(dice1 == dice2){
                break;
            }
        }
        System.out.println(count+"回目にぞろ目がでました!");
    }
}


問2

以下の処理を実現せよ。

[実行例]

9
8
7
6
5
4
3
2
1
発射!

[解答例]

java
import java.util.*;
public class Main{
public static void main(String[] args){
int n=9;
while(n>0){
System.out.println(n);
n--;
}
System.out.println("発射!");
}
}


問3

1~999までの乱数を繰り返し生成し777が最初に出るまでの回数を表示せよ。

[実行例]

1:34 2:432 3:321 ..... 1034:777 1034回目に777がでました!

[解答例]
import java.util.*;
public class Main{
    public static void main(String[] args){
        Random rand=new Random();
        int num=-1;
        int count=0;
        while(num !=777){
            count++;
            num=rand.nextInt(999)+1;
            System.out.printf("%d:%d%n",count,num);
        }
        System.out.println(count+"回目に777がでました!");
    }
}


問4

[実行結果]
正の整数>20
1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzBuzz
16
17
Fizz
19
Buzz

[解答例]
public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        System.out.print("正の整数>");
        int max=sc.nextInt();
        int i=1;
        String ans;
        while(i<=max){
            if(i %3 == 0 && i % 5== 0){
                ans="FizzBuzz";
            }else if(i % 3==0){
                ans="Fizz";
            }else if(i % 5==0){
                ans="Buzz";
            }else{
                ans=i+"";
            }
            System.out.println(ans);
            i++;
        }
    }
}

}

って認識です。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

第1回ETロボコン講座

#ETロボコン講座

始まりましたETロボコン講座
プライマリークラスの初心者向けに向けてのやっていきます
最終的にはゴールできるまでのレベルまであげていけたらいいなと思います

注意事項

初心者向けの講座になります。
アドバンスクラスやレベルの高い方にはあまり参考にならないと思うので読み飛ばすか、
間違っている所をみつけようとしてくれたら幸いです
筆者の環境はwindows10、cigwin64です

本編

今日の講座が終わればコードをコンパイルまでができるようになります

環境構築

開発は環境を整えなければ何もできませんまずは環境を整えましょう
環境構築は公式サイトを参考にしてください。
チームに配布されるパスワードがあれば閲覧できるはずです。
正直これが一番大変です。
ETロボコン公式サイト

ファイル構造

大変な環境構築が終わったらファイル構造から理解していきましょう。
image.png
workspaceのなかで開発します。workspaceの中で開発したいもののファイルを作成します。
そのファイルの中に必須のファイルがあるので以下に記します

app.c

必須ファイルです
ここでソースコードを書いていきます

app.h

app.cの構造を理解しなければapp.hは理解できないので今回はおまじないとしておきます

app.cfg

これもおまじないです

Makefile.inc

これもおまじないです

この4つがコードを書く上で同一のファイル内に必須となりますimage.png
testというファイルを作成する場合は上の画像のようになります。

app.cの構造

必須のコードが以下に示します

app.c
#include "ev3api.h"
#include "app.h"
#include <stdio.h>
#include <stdbool.h>
#include <balancer.h>

#if defined(BUILD_MODULE)
#include "module_cfg.h"
#else
#include "kernel_cfg.h"
#endif

#define DEBUG

#ifdef DEBUG
#define _debug(x) (x)
#else
#define _debug(x)
#endif
#define GYRO_OFFSET  0 

static const sensor_port_t
touch_sensor    = EV3_PORT_1,
sonar_sensor    = EV3_PORT_2,
color_sensor    = EV3_PORT_3,
gyro_sensor     = EV3_PORT_4;

static const motor_port_t
left_motor      = EV3_PORT_C,
right_motor     = EV3_PORT_B,
tail_motor      = EV3_PORT_A;
void bt_task(intptr_t unused)
{

}
void main_task(intptr_t unused)
{

}

このコードの中ではポートの設定や同一ファイル内にあるapp.hファイル等を呼び出しています。
よくわからない場合はとりあえずコピペしてください。

実際に書いていく

実際にコードを書く場所は上の部分の{ }内となります。

test.c
void main_task(intptr_t unused)
{

}

これはタイヤを70のスピードで走らせるコードです

test.c
void main_task(intptr_t unused)
{
    ev3_motor_config(right_motor,LARGE_MOTOR);
    ev3_motor_config(left_motor,LARGE_MOTOR);

    ev3_motor_set_power(EV3_PORT_C,70);
    ev3_motor_set_power(EV3_PORT_B,70);
}

上の2行で接続されているLARGEMOTERに接続しているポート名を宣言します。
下の2行は
ev3_motor_set_power(動かしたいモーターのポート名,モーターのスピード(100~-100))
となります。

コンパイル編

1.cygwinでCドライブ内のworkspaceディレクトリ内に移動します
コンパイルしたいファイルがworkspaceディレクトリ内にあるか確認してください
image.png
2.make appコマンドで実行します。
今回の場合はtest.cファイルをコンパイルしたいので下のようになります
image.png
LD appと表示されれば成功です
image.png
3.コンパイル後
コンパイルが成功するとworkspace内にappファイルが作成されます。
このappファイルをEV3にSDカード等を使用し移動させれば完了です。
image.png

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Unity玉転がしチュートリアル 1-1.ゲーム画面の構成

この記事の対象者

  • Unity入門したい人
  • 最初の一歩が踏み出せない人

OSとか環境とか

  • Windows 10 Pro
  • macOS Mojave
  • Unity 2019.2.8f1
  • Rider 2019.2.2

補足

  • 公式動画にて利用しているのはMacなので、Windowsユーザーはある程度脳内変換して見る事
  • 筆者はWindows、Macの両方の環境で確認。Ubuntuとかでは検証してない。
  • 基本Unityは英語メニューで利用
  • 間違いがあったらツッコミ大歓迎

公式のリンク

https://unity3d.com/jp/learn/tutorials/projects/roll-ball-tutorial/setting-game

プレイフィールドの追加

・プレイフィールドを作る為にUnity標準のPlaneを利用
GameObject>3D Object>Planeで追加
(HierarchyのCreateメニューからも同様の追加が可能)
・GameObjectの名前を変更(Plane→Groundに変更)

初期状態だと「新しいフォルダ」みたいな感じの名前になってると思って下さい
e46b09a9-6247-4ba1-abad-356d4525d3f1.png

Transformの歯車アイコンからResetをクリックして座標や回転などをリセット
249dcc49-cd37-45f4-ac39-7581e4b732a8.png

グリッドの表示/非表示はSceneビューのGizmosメニューのShow Gridをクリックして切り替え

ce75897c-8941-44a3-a29b-04f5ffdd92fb.png

スケールの変更について

  • スケールツールでドラッグして大きさを変える方法
  • 直接数値を入力する方法

Planeでは体積がないのでY軸のスケールは正の値を増やしても別に何も変化なし

なお、Sceneでオブジェクトを選択してFキー(Edit>Frame Selectedでも同様の動きだが、面倒くさいのでショートカットを覚える)でそのオブジェクトに対してカメラのフォーカスを当てることが出来る

プレイヤーオブジェクトの追加

Sphereオブジェクトを利用
Hierarchy>Create>Sphereを選択

Unityで扱う際に大きさの単位があり

  • cube
  • sphere
  • capsule

には標準単位が割り当てられている
直径が1単位なので、原点に配置しているSphereをPlaneの上に配置するには
Yを0.5単位上にずらすだけで良い(半径は0.5なので)

差別化

SphereとPlaneの両方があるけど、どっちも白い色なんでコントラストをつけましょう

色をつけるにはmaterial(マテリアル)が必要
※詳しい説明やテクスチャについては割愛
materialを保存するフォルダ(materials)をProjectビューで作成

フォルダを選択してProjectビューからCreate>materialを選択してmaterialファイル(*.matファイル)を作成する

色を変更して、濃い青色のmaterialを作る

a3b11651-47cb-47ee-abda-5598c27fda7a.png

動画では0,32,64(RGB)のカラーを指定
作ったmaterialの色を適用させるには、ドラッグでオブジェクトに対して指定するだけ
動画ではGroundの色を変えているが、テンションが乗らない人は適当に変更して下さい

8cb242eb-da51-421b-90fd-6017a192d177.png

床が青くなったので大勝利

ライティング

Directional Lightを選択してRotationを変更して光の当たり方を変更して完了

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

今更Unity入門 玉転がしチュートリアル動画を追っかける

「今更Unityっすか?情弱?」という声が聞こえてきそうだが、始めるのに遅すぎる事はないって偉い人が言ってたので学習始めます。

この記事の対象者

  • ゲーム制作してみたいけど意味分かんない人
  • 何から手を付ければいいかわからない人
  • 入門書を買ったけど、結局やらなかった人

Unityって何

https://unity.com/ja
すべての人に必要らしいです。
ざっくり言うと「ゲーム作成といえばこれ」ぐらい浸透している開発環境。
モストマスキュラー。
公式が全てなのでブックマークマークバーからはみ出るぐらいお気に入りに入れて下さい。

今回の食材

玉転がし
https://unity3d.com/jp/learn/tutorials/s/roll-ball-tutorial

公式が提供しているチュートリアル。
バージョンの関係で所々違う箇所があるが愛でカバー。
英語全く駄目な人はYoutubeの字幕機能で日本語にすれば意味がわかる。
いい時代ですね。

構成は以下の通り。

※イントロダクションは本当にイントロダクション(意味不明)なので、割愛します。
動画見て下さい。

各記事にリンクを貼る方法をやった事がないので、練習がてら作ってみます。
最後まで執筆するまで更新予定です。

  1. ゲーム画面の構成とプレイヤー
    01.ゲーム画面の構成
    02.プレイヤーの移動

  2. カメラとプレイ領域
    01.カメラの移動
    02.プレイエリアの構成(執筆中)

  3. オブジェクトの収集、スコアの記録、ゲームのビルド
    01.収集するオブジェクトの作成(執筆中)
    02.Pick Up オブジェクトの収集(執筆中)
    03.カメラの移動(執筆中)
    04.プレイエリアの構成(執筆中)

与太話

昔々、DirectXで格闘ゲームを作ろうと思って開発していたがあまりの作業量の多さに挫折した経験あり
(キャラ2人作った所で死んだ)

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

文字列から日付型に変換できるか判定したい

var hiduke = "2019/12/31";
Datetime dt;

 if (!DateTime.TryParse(hiduke, out dt))
            {
                // {0}行目:日付を入力して下さい。
                throw new BusinessException("003508", Row);
            }

hidukeが変換できるかどうか
出来なかったらBusinessExceptionを通る。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

麻の葉模様を描いてみた

背景が寂しかったので 麻の葉模様を書いてみました。

結果の画像
sample.png

xaml
    <Grid Background="#404445">
        <Grid>
            <Grid.Resources>
                <Style TargetType="Line">
                    <Setter Property="Stroke" Value="#505050"/>
                    <Setter Property="StrokeThickness" Value="1"/>
                </Style>
            </Grid.Resources>
            <Canvas Name="asa" Loaded="asa_Loaded" ClipToBounds="True">
            </Canvas>
        </Grid>
    </Grid>
C#
        private void asa_Loaded( object sender, RoutedEventArgs e )
        {
            double sizeX = 90;
            double sizeY = sizeX / 2;


            for( int x = 0; x < 20; x++ ) {
                for( int y = 0; y < 15; y++ ) {
                    asa.Children.Add( new Line {
                        X1 = 0 + ( x * sizeX ),
                        X2 = sizeX / 3 + ( x * sizeX ),
                        Y1 = 0 + ( y * sizeY ),
                        Y2 = 0 + ( y * sizeY ),
                        StrokeThickness = 0.5
                    } );
                    asa.Children.Add( new Line {
                        X1 = sizeX * 2 / 3 + ( x * sizeX ),
                        X2 = sizeX + ( x * sizeX ),
                        Y1 = 0 + ( y * sizeY ),
                        Y2 = 0 + ( y * sizeY ),
                        StrokeThickness = 0.5
                    } );
                    asa.Children.Add( new Line {
                        X1 = sizeX / 3 + ( x * sizeX ),
                        X2 = sizeX / 2 + ( x * sizeX ),
                        Y1 = 0 + ( y * sizeY ),
                        Y2 = sizeY / 2 + ( y * sizeY ),
                    } );
                    asa.Children.Add( new Line {
                        X1 = sizeX / 2 + ( x * sizeX ),
                        X2 = sizeX * 2 / 3 + ( x * sizeX ),
                        Y1 = sizeY / 2 + ( y * sizeY ),
                        Y2 = 0 + ( y * sizeY ),
                    } );
                    asa.Children.Add( new Line {
                        X1 = 0 + ( x * sizeX ),
                        X2 = sizeX / 2 + ( x * sizeX ),
                        Y1 = 0 + ( y * sizeY ),
                        Y2 = sizeY / 2 + ( y * sizeY ),
                    } );
                    asa.Children.Add( new Line {
                        X1 = sizeX / 2 + ( x * sizeX ),
                        X2 = sizeX + ( x * sizeX ),
                        Y1 = sizeY / 2 + ( y * sizeY ),
                        Y2 = 0 + ( y * sizeY ),
                    } );
                    asa.Children.Add( new Line {
                        X1 = sizeX / 6 + ( x * sizeX ),
                        X2 = sizeX * 5 / 6 + ( x * sizeX ),
                        Y1 = sizeY / 2 + ( y * sizeY ),
                        Y2 = sizeY / 2 + ( y * sizeY ),
                    } );
                    asa.Children.Add( new Line {
                        X1 = sizeX / 2 + ( x * sizeX ),
                        X2 = sizeX / 2 + ( x * sizeX ),
                        Y1 = 0 + ( y * sizeY ),
                        Y2 = sizeY + ( y * sizeY ),
                    } );
                    asa.Children.Add( new Line {
                        X1 = 0 + ( x * sizeX ),
                        X2 = sizeX / 3 + ( x * sizeX ),
                        Y1 = sizeY + ( y * sizeY ),
                        Y2 = sizeY + ( y * sizeY ),
                        StrokeThickness = 0.5
                    } );
                    asa.Children.Add( new Line {
                        X1 = sizeX * 2 / 3 + ( x * sizeX ),
                        X2 = sizeX + ( x * sizeX ),
                        Y1 = sizeY + ( y * sizeY ),
                        Y2 = sizeY + ( y * sizeY ),
                        StrokeThickness = 0.5
                    } );
                    asa.Children.Add( new Line {
                        X1 = sizeX * 2 / 3 + ( x * sizeX ),
                        X2 = sizeX / 2 + ( x * sizeX ),
                        Y1 = sizeY + ( y * sizeY ),
                        Y2 = sizeY / 2 + ( y * sizeY ),
                    } );
                    asa.Children.Add( new Line {
                        X1 = sizeX / 3 + ( x * sizeX ),
                        X2 = sizeX / 2 + ( x * sizeX ),
                        Y1 = sizeY + ( y * sizeY ),
                        Y2 = sizeY / 2 + ( y * sizeY ),
                    } );
                    asa.Children.Add( new Line {
                        X1 = 0 + ( x * sizeX ),
                        X2 = sizeX / 2 + ( x * sizeX ),
                        Y1 = sizeY + ( y * sizeY ),
                        Y2 = sizeY / 2 + ( y * sizeY ),
                    } );
                    asa.Children.Add( new Line {
                        X1 = sizeX / 2 + ( x * sizeX ),
                        X2 = sizeX + ( x * sizeX ),
                        Y1 = sizeY / 2 + ( y * sizeY ),
                        Y2 = sizeY + ( y * sizeY ),
                    } );
                    asa.Children.Add( new Line {
                        X1 = 0 + ( x * sizeX ),
                        X2 = 0 + ( x * sizeX ),
                        Y1 = 0 + ( y * sizeY ),
                        Y2 = sizeY + ( y * sizeY ),
                        StrokeThickness = 0.5
                    } );
                    asa.Children.Add( new Line {
                        X1 = sizeX + ( x * sizeX ),
                        X2 = sizeX + ( x * sizeX ),
                        Y1 = 0 + ( y * sizeY ),
                        Y2 = sizeY + ( y * sizeY ),
                        StrokeThickness = 0.5
                    } );

                    asa.Children.Add( new Line {
                        X1 = 0 + ( x * sizeX ),
                        X2 = sizeX / 6 + ( x * sizeX ),
                        Y1 = 0 + ( y * sizeY ),
                        Y2 = sizeY / 2 + ( y * sizeY ),
                    } );
                    asa.Children.Add( new Line {
                        X1 = sizeX / 6 + ( x * sizeX ),
                        X2 = 0 + ( x * sizeX ),
                        Y1 = sizeY / 2 + ( y * sizeY ),
                        Y2 = sizeY + ( y * sizeY ),
                    } );
                    asa.Children.Add( new Line {
                        X1 = sizeX + ( x * sizeX ),
                        X2 = sizeX * 5 / 6 + ( x * sizeX ),
                        Y1 = 0 + ( y * sizeY ),
                        Y2 = sizeY / 2 + ( y * sizeY ),
                    } );
                    asa.Children.Add( new Line {
                        X1 = sizeX * 5 / 6 + ( x * sizeX ),
                        X2 = sizeX + ( x * sizeX ),
                        Y1 = sizeY / 2 + ( y * sizeY ),
                        Y2 = sizeY + ( y * sizeY ),
                    } );
                }
            }
        }

こんなにいっぱい線を書くのが正解かどうかはわかりませんし、もう少しきれいなコードが書ける物なのか・・・。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む