package main
import "fmt"
func isPasswordValid(password string) bool {
if len(password) < 8 {
return false
} else {
return true
}
}
func main() {
fmt.Println(isPasswordValid("abc")) // false
fmt.Println(isPasswordValid("helloworld")) // true
}
タグ: programming
Go言語 複数の値
package main
import "fmt"
func divide(a, b int) (int, int) {
return a / b, a % b
}
func main() {
quotient, remainder := divide(10, 3)
fmt.Println(quotient)
fmt.Println(remainder)
}
UE5でマップを平たくする方法
UE5でマップを平たくする方法はいくつかありますが、用途に応じて以下の方法を試してください。
① ランドスケープを平らにする
ランドスケープを使用している場合、以下の手順で平坦化できます。
- [モード] → [ランドスケープ] を開く。
- [スカルプト] モード に切り替える。
- ツールから [Flatten(平坦化)] を選択。
- ブラシサイズを調整 して、なだらかに整える。
- 必要に応じて「ターゲット値(Target Value)」を設定し、均一な高さにする。
② 既存のオブジェクトを平らにする
Static Mesh などのオブジェクトを平らにしたい場合は:
- スケールを調整(Z軸のスケールを小さくする)。
- モデルをエディタで編集(Static Mesh Editorで頂点編集する)。
- ボックスコリジョンを利用(コリジョンを追加して物理的に平らに見せる)。
③ ワールドの高さを統一する
「ワールドの高さを揃えたい」場合は、オブジェクトのZ座標を統一する:
- オブジェクトをすべて選択。
- [詳細] パネルで Z 座標を統一(例:Z = 0 にする)。
- 「スナップ機能」をオンにして調整(
Ctrl+Endでグリッドに揃える)。
④ ランドスケープをリセットする
マップを完全にリセットして平らにしたい場合は:
- ランドスケープを削除(選択して
Delete)。 - 新規ランドスケープを作成(最初から平らな状態で生成)。
- 必要に応じて「マテリアル」「コリジョン」を設定。
Go言語 switch
package main
import "fmt"
func main() {
var score int
fmt.Println("Score?")
fmt.Scanf("%d", &score)
if score >= 90 {
fmt.Println("A!")
} else if score >= 70 {
fmt.Println("B!")
} else {
fmt.Println("C!")
}
switch{
case score >= 90:
fmt.Println("A!")
case score >= 70:
fmt.Println("B!")
default:
fmt.Println("C!")
}
}
Go言語 if else
package main
import "fmt"
func main() {
var score int
fmt.Println("Score?")
fmt.Scanf("%d", &score)
if score >= 90 {
fmt.Println("A!")
} else {
fmt.Println("Not A!")
}
}
Go言語 定数
package main
import "fmt"
func main() {
price := 150
//rate := 1.1
const rate = 1.1
fmt.Println(float64(price) * float64(120) * rate)
fmt.Println(float64(price) * float64(130) * rate)
fmt.Println(float64(price) * float64(140) * rate)
price++
//rate = 1.08
fmt.Println(float64(price) * float64(120) * rate)
fmt.Println(float64(price) * float64(130) * rate)
fmt.Println(float64(price) * float64(140) * rate)
}
Go言語 変数
package main
import "fmt"
func main() {
// fmt.Println(150 * 120)
// fmt.Println(150 * 130)
// fmt.Println(150 * 140)
var price int
price = 150
fmt.Println(price * 120)
fmt.Println(price * 130)
fmt.Println(price * 140)
}
ブロック崩し
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Breakout Game</title>
<style>
/* 画面中央にキャンバスを表示 */
canvas {
background: #eee;
display: block;
margin: 30px auto;
border: 1px solid #333;
}
</style>
</head>
<body>
<canvas id="myCanvas" width="480" height="320"></canvas>
<script>
// キャンバスとコンテキストを取得
const canvas = document.getElementById("myCanvas");
const ctx = canvas.getContext("2d");
// ボールの設定
let x = canvas.width / 2; // ボールの初期位置 X
let y = canvas.height - 30; // ボールの初期位置 Y
const ballRadius = 8; // ボールの半径
let dx = 2; // ボールの移動速度 X方向
let dy = -2; // ボールの移動速度 Y方向
// パドルの設定
const paddleHeight = 10;
const paddleWidth = 75;
let paddleX = (canvas.width - paddleWidth) / 2; // パドルの初期位置
let rightPressed = false; // 右キーが押されているか
let leftPressed = false; // 左キーが押されているか
// ブロック(レンガ)の設定
const brickRowCount = 5; // 行数
const brickColumnCount = 7; // 列数
const brickWidth = 50; // 幅
const brickHeight = 20; // 高さ
const brickPadding = 10; // ブロック間の余白
const brickOffsetTop = 30; // 画面上端からのオフセット
const brickOffsetLeft = 30; // 画面左端からのオフセット
// スコアやライフ
let score = 0;
let lives = 3; // 残機
// ブロックを格納する2次元配列
let bricks = [];
for(let c = 0; c < brickColumnCount; c++) {
bricks[c] = [];
for(let r = 0; r < brickRowCount; r++) {
// x, yは後で計算するので、とりあえずステータスだけ持たせておく
bricks[c][r] = { x: 0, y: 0, status: 1 };
}
}
// キーボードイベントのリスナー登録
document.addEventListener("keydown", keyDownHandler, false);
document.addEventListener("keyup", keyUpHandler, false);
function keyDownHandler(e) {
if(e.key === "Right" || e.key === "ArrowRight") {
rightPressed = true;
}
else if(e.key === "Left" || e.key === "ArrowLeft") {
leftPressed = true;
}
}
function keyUpHandler(e) {
if(e.key === "Right" || e.key === "ArrowRight") {
rightPressed = false;
}
else if(e.key === "Left" || e.key === "ArrowLeft") {
leftPressed = false;
}
}
// ブロックとボールの当たり判定
function collisionDetection() {
for(let c = 0; c < brickColumnCount; c++) {
for(let r = 0; r < brickRowCount; r++) {
let b = bricks[c][r];
// status=1 のブロックだけ当たり判定をする
if(b.status === 1) {
if(
x > b.x &&
x < b.x + brickWidth &&
y > b.y &&
y < b.y + brickHeight
) {
dy = -dy;
b.status = 0; // ブロックを消す
score++;
// 全ブロック破壊 → クリア
if(score === brickRowCount * brickColumnCount) {
alert("YOU WIN, CONGRATS!");
document.location.reload(); // ページをリロードして再開
}
}
}
}
}
}
// ボールを描画
function drawBall() {
ctx.beginPath();
ctx.arc(x, y, ballRadius, 0, Math.PI * 2);
ctx.fillStyle = "#0095DD";
ctx.fill();
ctx.closePath();
}
// パドルを描画
function drawPaddle() {
ctx.beginPath();
ctx.rect(paddleX, canvas.height - paddleHeight - 5, paddleWidth, paddleHeight);
ctx.fillStyle = "#0095DD";
ctx.fill();
ctx.closePath();
}
// ブロックを描画
function drawBricks() {
for(let c = 0; c < brickColumnCount; c++) {
for(let r = 0; r < brickRowCount; r++) {
if(bricks[c][r].status === 1) {
let brickX = (c * (brickWidth + brickPadding)) + brickOffsetLeft;
let brickY = (r * (brickHeight + brickPadding)) + brickOffsetTop;
bricks[c][r].x = brickX;
bricks[c][r].y = brickY;
ctx.beginPath();
ctx.rect(brickX, brickY, brickWidth, brickHeight);
ctx.fillStyle = "#6CBE47";
ctx.fill();
ctx.closePath();
}
}
}
}
// スコアを描画
function drawScore() {
ctx.font = "16px Arial";
ctx.fillStyle = "#333";
ctx.fillText("Score: " + score, 8, 20);
}
// ライフを描画
function drawLives() {
ctx.font = "16px Arial";
ctx.fillStyle = "#333";
ctx.fillText("Lives: " + lives, canvas.width - 65, 20);
}
// 毎フレーム呼び出して描画&更新するメイン関数
function draw() {
ctx.clearRect(0, 0, canvas.width, canvas.height);
// 各パーツの描画
drawBricks();
drawBall();
drawPaddle();
drawScore();
drawLives();
collisionDetection();
// ボールを左右の壁で反射
if(x + dx > canvas.width - ballRadius || x + dx < ballRadius) {
dx = -dx;
}
// 上壁で反射
if(y + dy < ballRadius) {
dy = -dy;
}
// 下に落ちたらライフを1減らしてリセット
else if(y + dy > canvas.height - ballRadius) {
// パドルの範囲内かどうか
if(x > paddleX && x < paddleX + paddleWidth) {
// パドルに当たったらはね返す
dy = -dy;
} else {
// ミス → ライフ減少
lives--;
if(!lives) {
// ライフ0 → ゲームオーバー
alert("GAME OVER");
document.location.reload();
} else {
// ボールとパドルを初期位置へ
x = canvas.width / 2;
y = canvas.height - 30;
dx = 2;
dy = -2;
paddleX = (canvas.width - paddleWidth) / 2;
}
}
}
// ボール位置の更新
x += dx;
y += dy;
// パドルの操作
if(rightPressed && paddleX < canvas.width - paddleWidth) {
paddleX += 7;
} else if(leftPressed && paddleX > 0) {
paddleX -= 7;
}
requestAnimationFrame(draw);
}
// ゲーム開始
draw();
</script>
</body>
</html>
Automation Studio
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Automation Studio</title>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css">
<style>
:root {
--primary-color: #00c7b7;
--secondary-color: #2d3436;
--background-color: #f8f9fa;
--card-shadow: 0 4px 6px rgba(0,0,0,0.1);
}
* {
margin: 0;
padding: 0;
box-sizing: border-box;
font-family: 'Segoe UI', system-ui;
}
body {
background: var(--background-color);
color: var(--secondary-color);
}
/* ヘッダー */
.dashboard-header {
display: flex;
justify-content: space-between;
align-items: center;
padding: 1.5rem;
background: white;
box-shadow: var(--card-shadow);
}
.brand {
display: flex;
align-items: center;
gap: 1rem;
}
.brand-logo {
width: 40px;
height: 40px;
}
/* メインコンテンツ */
.main-container {
max-width: 1200px;
margin: 2rem auto;
padding: 0 1rem;
}
/* アプレットカード */
.applet-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(320px, 1fr));
gap: 1.5rem;
margin-top: 2rem;
}
.applet-card {
background: white;
border-radius: 12px;
padding: 1.5rem;
box-shadow: var(--card-shadow);
transition: transform 0.2s;
position: relative;
}
.applet-card:hover {
transform: translateY(-5px);
}
.applet-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 1rem;
}
.toggle-switch {
position: relative;
display: inline-block;
width: 48px;
height: 24px;
}
.toggle-slider {
position: absolute;
cursor: pointer;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-color: #ccc;
transition: .4s;
border-radius: 34px;
}
.toggle-slider:before {
position: absolute;
content: "";
height: 16px;
width: 16px;
left: 4px;
bottom: 4px;
background-color: white;
transition: .4s;
border-radius: 50%;
}
input:checked + .toggle-slider {
background-color: var(--primary-color);
}
input:checked + .toggle-slider:before {
transform: translateX(24px);
}
.service-flow {
display: flex;
align-items: center;
gap: 1rem;
margin: 1.5rem 0;
}
.service-icon {
width: 48px;
height: 48px;
border-radius: 12px;
padding: 8px;
box-shadow: var(--card-shadow);
}
.divider-arrow {
flex-grow: 1;
border-top: 2px dashed #ddd;
position: relative;
}
.divider-arrow::after {
content: "➔";
position: absolute;
right: -10px;
top: -12px;
background: white;
padding: 0 4px;
color: var(--primary-color);
}
/* 作成モーダル */
.modal-overlay {
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: rgba(0,0,0,0.5);
display: none;
align-items: center;
justify-content: center;
z-index: 1000;
}
.modal-content {
background: white;
border-radius: 16px;
width: 90%;
max-width: 600px;
max-height: 90vh;
overflow-y: auto;
padding: 2rem;
animation: modalSlideIn 0.3s ease-out;
}
@keyframes modalSlideIn {
from { transform: translateY(20px); opacity: 0; }
to { transform: translateY(0); opacity: 1; }
}
.service-picker {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 1rem;
margin: 2rem 0;
}
.service-option {
text-align: center;
padding: 1rem;
border: 2px solid #eee;
border-radius: 8px;
cursor: pointer;
transition: all 0.2s;
}
.service-option:hover {
border-color: var(--primary-color);
background: #f7f7f7;
}
.service-option img {
width: 64px;
height: 64px;
margin-bottom: 0.5rem;
}
/* レスポンシブデザイン */
@media (max-width: 768px) {
.applet-grid {
grid-template-columns: 1fr;
}
.service-picker {
grid-template-columns: repeat(2, 1fr);
}
}
</style>
</head>
<body>
<header class="dashboard-header">
<div class="brand">
<img src="https://img.icons8.com/color/96/automation.png" class="brand-logo" alt="Logo">
<h1>Automation Studio</h1>
</div>
<button class="create-button" onclick="openModal()">
<i class="fas fa-plus"></i> New Automation
</button>
</header>
<div class="main-container">
<div class="applet-grid">
<!-- アプレットが動的に追加されます -->
</div>
</div>
<!-- 作成モーダル -->
<div class="modal-overlay" id="modal">
<div class="modal-content">
<h2>Create New Automation</h2>
<div class="service-picker" id="triggerServices">
<!-- トリガーサービスが動的に追加されます -->
</div>
<div class="service-picker" id="actionServices">
<!-- アクションサービスが動的に追加されます -->
</div>
<div class="modal-actions">
<button class="btn-secondary" onclick="closeModal()">Cancel</button>
<button class="btn-primary" onclick="createApplet()">Create</button>
</div>
</div>
</div>
<script>
// ダミーデータ
const services = {
triggers: [
{ id: 'email', name: 'Email', icon: 'https://img.icons8.com/color/96/new-post.png' },
{ id: 'calendar', name: 'Calendar', icon: 'https://img.icons8.com/color/96/google-calendar.png' },
{ id: 'weather', name: 'Weather', icon: 'https://img.icons8.com/color/96/partly-cloudy-day.png' }
],
actions: [
{ id: 'slack', name: 'Slack', icon: 'https://img.icons8.com/color/96/slack.png' },
{ id: 'drive', name: 'Google Drive', icon: 'https://img.icons8.com/color/96/google-drive.png' },
{ id: 'notification', name: 'Notification', icon: 'https://img.icons8.com/color/96/appointment-reminders.png' }
]
};
// モーダル制御
function openModal() {
document.getElementById('modal').style.display = 'flex';
populateServices();
}
function closeModal() {
document.getElementById('modal').style.display = 'none';
}
// サービスの表示
function populateServices() {
const triggerContainer = document.getElementById('triggerServices');
const actionContainer = document.getElementById('actionServices');
triggerContainer.innerHTML = services.triggers.map(service => `
<div class="service-option" onclick="selectTrigger('${service.id}')">
<img src="${service.icon}" alt="${service.name}">
<div>${service.name}</div>
</div>
`).join('');
actionContainer.innerHTML = services.actions.map(service => `
<div class="service-option" onclick="selectAction('${service.id}')">
<img src="${service.icon}" alt="${service.name}">
<div>${service.name}</div>
</div>
`).join('');
}
// アプレット作成
let selectedTrigger = null;
let selectedAction = null;
function selectTrigger(serviceId) {
selectedTrigger = services.triggers.find(s => s.id === serviceId);
updateSelections();
}
function selectAction(serviceId) {
selectedAction = services.actions.find(s => s.id === serviceId);
updateSelections();
}
function updateSelections() {
document.querySelectorAll('.service-option').forEach(el => {
el.style.borderColor = '#eee';
});
if (selectedTrigger) {
const triggerEl = document.querySelector(`[onclick="selectTrigger('${selectedTrigger.id}')"]`);
triggerEl.style.borderColor = 'var(--primary-color)';
}
if (selectedAction) {
const actionEl = document.querySelector(`[onclick="selectAction('${selectedAction.id}')"]`);
actionEl.style.borderColor = 'var(--primary-color)';
}
}
function createApplet() {
if (!selectedTrigger || !selectedAction) return;
const appletGrid = document.querySelector('.applet-grid');
const newApplet = document.createElement('div');
newApplet.className = 'applet-card';
newApplet.innerHTML = `
<div class="applet-header">
<h3>${selectedTrigger.name} → ${selectedAction.name}</h3>
<label class="toggle-switch">
<input type="checkbox">
<span class="toggle-slider"></span>
</label>
</div>
<div class="service-flow">
<img src="${selectedTrigger.icon}" class="service-icon">
<div class="divider-arrow"></div>
<img src="${selectedAction.icon}" class="service-icon">
</div>
<p>Last triggered: Never</p>
`;
appletGrid.appendChild(newApplet);
closeModal();
selectedTrigger = null;
selectedAction = null;
}
// モーダル外をクリックで閉じる
window.onclick = function(event) {
if (event.target.classList.contains('modal-overlay')) {
closeModal();
}
}
</script>
</body>
</html>
C# スライムの攻撃
using System;
public class Program{
public static void Main(){
var random = new Random();
var dice = random.Next(1, 7);
Console.WriteLine("サイコロは" + dice);
if (dice >= 4) {
Console.WriteLine("スライムの攻撃をかわした");
} else {
Console.WriteLine("スライムから10のダメージを受けた");
}
}
}
