게임명

Frost Punk

장르

생존 전략 운영

제작사

11bit studio

플레이 일

3

클리어 수

4

평점

★★★★

장점: 질리지 않는 多회차 플레이

단점: 어려운 시작


이 게임은 나에게 굉장한 경험을 선사해 주었다. 시대적 배경은

과거 산업혁명시기인 것 같다. 인류에게 빙하기가 오게 되어 사

들은 발전기를 이용해서 목숨을 부지하려 한.


그 사람들의 지도자가 되어 한정되어있는 자원들을 효율적으로

사용하여 생존하는 게임이다. 하지만 텍스트만의 설명으로는

게임을 헤쳐 나갈 수 없다. 중간중간 발생하는 이벤트도 흥

미롭고, 선택지에 따라 게임의 결과가 달라질 수 있다. 하지만

그런 서브 이벤트가 한정되어 있어 나중에는 속된말고인

이 된다. 사람들의 희망과 불만수치도 잘 관리 해 주어야한

.


추후 나올 모드나 패치들이 상당히 기대가 되는 작품이다. 또한

반대로 빙하기가 아닌 아열대 모드같은 것도 충분히 나올 만 하

재미있을 것이다.


ActivityMain.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
>

<HorizontalScrollView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_weight="5">

<ScrollView
android:layout_width="wrap_content"
android:layout_height="wrap_content">

<ImageView
android:id="@+id/up"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/friends"
android:visibility="visible" />
</ScrollView>
</HorizontalScrollView>

<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_gravity="center"

>
<Button
android:id="@+id/upBut"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="UP"
android:onClick="UP"/>
<Button
android:id="@+id/downBut"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="DOWN"
android:onClick="DOWN"/>

</LinearLayout>

<HorizontalScrollView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_weight="5">

<ScrollView
android:layout_width="wrap_content"
android:layout_height="wrap_content">

<ImageView
android:id="@+id/down"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/friends"
android:visibility="invisible" />
</ScrollView>
</HorizontalScrollView>

</LinearLayout>

MainActivity.java

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;

public class MainActivity extends AppCompatActivity {
ImageView up;
ImageView down;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
up = (ImageView) findViewById(R.id.up);
down = (ImageView) findViewById(R.id.down);
}



public void UP(View v){
upimage();
}
public void DOWN(View v){
downimage();
}

private void upimage(){
up.setVisibility(View.VISIBLE);
down.setVisibility(View.INVISIBLE);

}
private void downimage(){
up.setVisibility(View.INVISIBLE);
down.setVisibility(View.VISIBLE);
}
}

실행화면

 

기본 화면

 

down 버튼 누르면

up 버튼 누르면

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent>


<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#ff5555ff"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Base Area"
android:textColor="#ffffffff"
/>
</LinearLayout>

<LinearLayout
android:id="@+id/page"
android:orientation="vertical"
android:layout_width="200dp"
android:layout_height="match_parent"
android:layout_gravity="right"
android:background="#ffffff66"
android:visibility="gone"
>
<TextView
android:layout_weight="1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="area #1"
android:textColor="#ff000000"
/>
<TextView
android:layout_weight="1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="area #2"
android:textColor="#ff000000"
/>
</LinearLayout>

<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_gravity="right|center_vertical"
android:background="#00000000">

<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="open"
/>
</LinearLayout>

</FrameLayout>

mainActivity.java



import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.Button;
import android.widget.LinearLayout;

public class MainActivity extends AppCompatActivity {
boolean ispageOpen = false;

Animation leftanim;
Animation rightanim;
LinearLayout page;
Button button;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
page = (LinearLayout) findViewById(R.id.page);

leftanim = AnimationUtils.loadAnimation(this, R.anim.leftslide);
rightanim = AnimationUtils.loadAnimation(this, R.anim.rightslide);

SlidingPageAnimationListener listener = new SlidingPageAnimationListener();
leftanim.setAnimationListener(listener);
rightanim.setAnimationListener(listener);
button = (Button) findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (ispageOpen) {
page.startAnimation(rightanim);
} else {
page.setVisibility(View.VISIBLE);
page.startAnimation(leftanim);
}
}
});

}

private class SlidingPageAnimationListener implements Animation.AnimationListener{
@Override
public void onAnimationStart(Animation animation) {

}

public void onAnimationEnd(Animation animation) {
if (ispageOpen) {
page.setVisibility(View.INVISIBLE);

button.setText("open");
ispageOpen = false;
} else {
button.setText("close");
ispageOpen = true;
}
}

@Override
public void onAnimationRepeat(Animation animation) {

}
}
}

실행화면

버튼 클릭 전

 

버튼 클릭후

 

activity_main.xml (첫화면,로그인 전 화면)

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"

android:orientation="vertical"
>

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">

<TextView
android:id="@+id/textViewID"
android:layout_width="100dp"
android:layout_height="50dp"
android:layout_weight="1"
android:text="ID"
android:textSize="28dp" />

<EditText
android:id="@+id/eid"
android:layout_width="213dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:hint="ID" />

</LinearLayout>

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">

<TextView
android:id="@+id/textViewpw"
android:layout_width="100dp"
android:layout_height="50dp"
android:layout_weight="1"
android:text="PW"
android:textSize="26dp" />

<EditText
android:id="@+id/epw"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1"
android:ems="10"
android:hint="password"
android:inputType="textPassword" />

</LinearLayout>

<Button
android:id="@+id/gotomenu"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="0"
android:onClick="login"
android:text="로그인" />

</LinearLayout>


activtiy_main2.xml (로그인 후 화면)
 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical">


<Button
android:id="@+id/customerM"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="고객관리"
/>

<Button
android:id="@+id/profitM"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="매출관리"
/>
<Button
android:id="@+id/goodsM"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="상품관리"
/>

</LinearLayout>

MainActivity.java



import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {
public static final int REQUEST_CODE_MENU=101;
String userid="identity";
String userpw="password";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_CODE_MENU) {
if (resultCode == RESULT_OK) {
String menu = data.getExtras().getString("menu");
Toast.makeText(getApplicationContext(), "응답으로 전달된 menu :" + menu, Toast.LENGTH_LONG).show();
}
}
}
public void login(View v){
EditText id=(EditText)findViewById(R.id.eid);
EditText pw=(EditText)findViewById(R.id.epw);

if(id.getText().toString().equals(userid)){
if (pw.getText().toString().equals(userpw)){
Intent intent=new Intent(getApplicationContext(),Main2Activity.class);
startActivityForResult(intent,REQUEST_CODE_MENU);
}
else Toast.makeText(MainActivity.this,"로그인 실패",Toast.LENGTH_LONG).show();
}
else Toast.makeText(MainActivity.this,"로그인 실패",Toast.LENGTH_LONG).show();
}

}

Main2Activity.java

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class Main2Activity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);

Button customerM=(Button)findViewById(R.id.customerM);
Button profitM=(Button)findViewById(R.id.profitM);
Button goodsM=(Button)findViewById(R.id.goodsM);

customerM.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.putExtra("menu","customer");
setResult(RESULT_OK,intent);

finish();
}
});
profitM.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.putExtra("menu","profit");
setResult(RESULT_OK,intent);

finish();
}
});
goodsM.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.putExtra("menu","goods");
setResult(RESULT_OK,intent);

finish();
}
});
}
}

5세대(5G) 이동통신 주도권을 결정짓는 주파수 경매 초안이 공개됐습니다. 최저경쟁가격은 3.5㎓ 대역 2조6544억원, 28㎓ 대역 6216억원이다. 2개 대역의 경매 최저경쟁가격을 합치면 3조2760억원에 달한다고 합니다.


하지만 이동통신 3사의 입장은 달랐습니다. 정부가 5G주파수의 가격을 너무 높게 잡았다며 재조정을 요구했습니다.

입찰을 맡은 과학기술정보통신부측 입장은 "할당 대가와 관련해 3.5㎓ 대역의 경우 2016년 경매 최저가를 고려했고, 28㎓ 대역은 불확실성을 고려해 재할당시 가격을 재산정하겠다"며 "최소한의 대가를 부여했다"고 표명했습니다.


경매 추진 세부 일정은 과학기술정보통신부가 5월 이동통신 주파수 할당 공고를 내고, 6월 주파수 경매가 진행될 예정이다.



'일상 잡글' 카테고리의 다른 글

오늘은 무슨날일까요  (1) 2018.04.19

오늘은 4월 19일입니다.

58년전 오늘 이승만 정권에 대항해 일어난 학생, 시민 중심세력의 반독재 민주주의 운동인 4.19혁명이 일어났습니다.

이승만정권은 1948년부터 60년 까지 발췌개헌, 사사오입 개헌등의 불법적 개헌을 통해 총 12년간 장기 집권 하였습니다. 그리고 1960년 3월 15일 4대 부정통령 선출 선거에서 반공개 투표, 투표함 바꿔치기, 득표수 조작등 부정선거를 시행하였습니다.


그러자 마산에서 시민들과 학생이 부정선거를 반대하는 격렬한 시위를 벌였고 이승만정권은 총격과 폭력으로 무참히 강제진압하던 도중 다수의 사상자가 발생하였습니다.


이후 4월 11일에 1차 마산시위에서 실종된 김주열군이 눈에 최루탄이 박힌 시체로 발견됨으로써 시민들은 더욱 분개하여 2차 시위가 일어나게 되었습니다. 


그리고 4월 18일 고려대학교의 4천여명의 학생들이 민주이념을 쟁취하기 위한 선언문을 낭독하고, 국회의사당으로 진출했습니다. 이후 학교로 복귀하다가 괴한들의 습격에 부상당했다.


또 이에 분개한 시민들은 다음날인 58년전 오늘, 이승만 하야와 독재정권 타도를 위한 혁명적 투쟁으로 발전하였고, 이에 이승만 정권은 무력으로 탄압하고 비상계엄령을 선포하였다.

하지만 시민들은 무력에도 굽히지 않고 더욱 완강하게 투쟁하여 결국 1960년 4월 26일 이승만은 결국 대통령직에서 하야하였습니다.


대한민국의 현대는 시민들이 많은 것을 바꾸어 왔는데요.

여러분도 우리나라 시민으로써 잊지말고 자신감을 가지고 생활하세요.

'일상 잡글' 카테고리의 다른 글

4차 산업혁명, IoT 시대, '5G 주파수 경매 시작'  (0) 2018.04.19

유무선 통신에서 음성,영상,데이터와 같은 신호를 전달할때 특정주파수에 이를 실어서 보내거나 펄스로 변환해보낸다. 이 변환 과정을 변조(Modulation)라고 하고 되돌리는 과정을 복조(Demodulation)라고 한다.

 

1.아날로그 변조

저주파 신호를 고주파 신호로 변조하는 방식이다. 디지털 변조에 밀려 거의 사용되지 않게되었다.

 

1-1. 진폭변조(Amplitude Modulation)

반송파의 진폭에 보내고자하는 정보를 싣는 변조방식이다. 전파의 진폭은 주변환경의 영향을 많이 받기 때문에 전달과정 노이즈가 섞이기 쉽다. 회로가 간단하여 저렴하지만, 전력효율이 좋지않다.

 

1-2. 주파수변조(Frequency Modulation)

반송파의 주파수에 보내고자하는 정보를 싣는 변조방식이다. 라디오 신호나 TV의 음성신호로 쓰인다. AM에 비해 주변환경의 영향을 덜 받고, 소비전력도 적다. 하지만 송수신기의 회로가 복잡하다. 또한 주파수 대역폭을 많이 사용한다.

 

1-3. 위상변조(Phase Modulation)

반송파의 위상에 보내고자하는 정보를 싣는 변조방식이다. FM에서 입력값을 미분해서 넣어주면 PM이되고, PM에서 입력값을 적분해서 넣어주면 FM이 된다는 특징이 있다.

 

2.디지털 변조

현대 무선통신의 필수요소. 디지털 저주파신호를 디지털 고주파 신호로 변환하는 변조 방식이다.

 

2-1. 진폭 편이 변조(Amplitude Shift Keying)

반송파의 진폭을 바꾸는 변조. 거의 사용되지 않는 변조 방식이다. 반송주파수의 서로 다른 두가지의 진폭을 이용하여 0과 1을 표현하는 방식이다.

 

2-2. 주파수 편이 변조(Frequency Shift Keying)

중심주파수를 사이에 두고 높은주파수, 낮은 주파수에 0과 1로 대응시키는 변조방식이다. 잡음에 강하나, 고속전송에 비적합하여 저속모뎀에서 주로 사용된다.


2-3. 위상편이변조(Phase Shift Keying)

일정 진폭의 반송파 위상을 2등분, 4등분, 8등분 등으로 나누어 각각 다른 위상에 0과 1을 대응시키는 변조방식이다.

 

1) AL(Active Low)

말그대로 입력값이 low 이면 동작하는 것이다.



 위 그림과 같이 io핀의 출력이 low이면 LED에 빛이 들어올것이다. 즉 켜지지 않은 상태에서 기본이 high다. 그래서 AL를 Normal High라고도 한다.


2) AH(Active High)

위와 반대로 입력값이 high면 동작하는 것이다.



 위 그림에서 io핀의 출력이 high이면 LED에 빛이 들어온다.

즉 켜지지 않은 상태에서 기본이 low다. 그래서 AH 를 Normal Low라고 하기도 한다.


3) Floating 상태

 floating 상태란 입력되는 전압이 0도 아니고 1도아닌 상태를 의미한다.

이 상태가 되면 예상치 못한 결과를 초래 할 수 있기 때문에 동작방식이 Active Low, Active High 인지 에 따라 풀업, 풀다운 저항을 달아준다.



3-1 풀업 저항
풀업은 플로팅상태의 전압을 끌어 올리는것을 말한다. Active Low, 즉 Normal High 에서 사용한다. 저항은 VCC쪽에 달아준다.


기본적으로 스위치가 닫혀있을때 전류가 VCC - io 핀으로 흐른다. 스위치가 눌리면 전류가 VCC - GND로 연결된다. 그래서 io핀에는 아무전류도 흐르지 않게 되고 Low가 된다. 


3-2 풀다운 저항

풀다운은 플로팅상태의 전압을 내리는 것을 말한다. Active High, 즉 Normal Low에서 사용한다. 풀업과는 반대로 저항은 GND쪽에 달아준다.


스위치가 닫혀있을때에는 입출력핀과 GND가 연결되어 있어 Normal Low 상태이다. 스위치가 눌리면 VCC가 GND와 도통될것 같지만 저항 때문에 전류가 io핀쪽으로도 흐르게 된다.

안녕하세요~ 벌써 2018년의 1월이 가고 2월이 찾아온지도 벌써 8일이나 지났네요.


작년 12월말 올린 2018 기대영화 작품을 소개한 글이 있었는데요. 벌써 많은 작품이 개봉했기도 하지만, 저는 기대되는 영화가 따로 있습니다.


바로 마블의 블랙팬서와 인피니티워가 바로 그 작품이죠.!


블랙팬서는 일주일채 남지않은 2월 14일 개봉예정이고 벌써 출연진과 감독이 내한하여 인터뷰 행사, 시사회 등을 하며 홍보에 열을 올리고있습니다.

또한 마지막을 향해 달려가는 어벤져스: 인피니티 워도 빼놓을 수 없죠. 타노스를 막기위한 어벤져스의 여정은 5월초에 만나 보실수 있을 것 같습니다.


이렇게 핫한 올해 라인업을 보니 마블영화가 또 궁금하거나 전편을 찾아 보고싶은데 순서를 몰라서 못보시는 분들을 위해 제가 직접 만들어 보았습니다.


바로 마블 시네마틱 유니버스(MCU) 가이드 라인!




A4 크기로 제작되었으니 인쇄하셔서 어디에 장식하셔도 될것같습니다 ㅎ.

이 가이드 라인이 여러분의 마블 영화관람에 조금이라도 도움이 되었으면 합니다.


감사합니다!

'영화' 카테고리의 다른 글

2018상반기 기대영화라인업  (0) 2017.12.24

안녕하세요 벌써 크리스마스네요 


그래서 제가 크리스마스에 어울리는 음악을 준비해왔습니다.



1. Santa Tell Me - Ariana Grande


2. only hope - Mandy Moore


3. 첫눈처럼 너에게 가겠다 - 에일리



4. 크리스마스니까 - 성시경 박효신 이석훈 서인국 빅스

매년 나오는 겨울노래죠. 안들리면 서운한정도인데 들을때마다 목소리들에 살살녹는것같습니다.


5. MUST HAVE LOVE -브아걸, SG 워너비


6. All I Want For Christmas

크리스마스 하면 빠질수없는 노래 2


7. let it go - Idina Menzel

겨울하면 빠질수없는 겨울왕국의 최애 OST 중 하나


8. 겨울을 걷는다 - 윤딴딴

훈훈한 보이스로 손시린 겨울을 이길수 있게 해주는 음악 


9. 내입술 따뜻한 커피처럼 - 에디킴

커피처럼 따뜻한 꿀보이스와 이성경의 적절한 보이스 의 환상조화


10. 4월의 눈 - 허각




올겨울은 작년겨울에 비해 눈도 많이온거같은데 이 따뜻한 음악 들으시며 올겨울도 건강하게 나세요!! 감사합니다.




+ Recent posts