Ecoer Logo
VOTING POWER100.00%
DOWNVOTE POWER100.00%
RESOURCE CREDITS100.00%
REPUTATION PROGRESS33.95%
Net Worth
0.161USD
STEEM
0.001STEEM
SBD
0.252SBD
Effective Power
5.008SP
├── Own SP
0.686SP
└── Incoming Deleg
+4.321SP

Detailed Balance

STEEM
balance
0.001STEEM
market_balance
0.000STEEM
savings_balance
0.000STEEM
reward_steem_balance
0.000STEEM
STEEM POWER
Own SP
0.686SP
Delegated Out
0.000SP
Delegation In
4.321SP
Effective Power
5.008SP
Reward SP (pending)
0.000SP
SBD
sbd_balance
0.252SBD
sbd_conversions
0.000SBD
sbd_market_balance
0.000SBD
savings_sbd_balance
0.000SBD
reward_sbd_balance
0.000SBD
{
  "balance": "0.001 STEEM",
  "savings_balance": "0.000 STEEM",
  "reward_steem_balance": "0.000 STEEM",
  "vesting_shares": "1116.407890 VESTS",
  "delegated_vesting_shares": "0.000000 VESTS",
  "received_vesting_shares": "7027.251916 VESTS",
  "sbd_balance": "0.252 SBD",
  "savings_sbd_balance": "0.000 SBD",
  "reward_sbd_balance": "0.000 SBD",
  "conversions": []
}

Account Info

nameflocksserver
id576795
rank714,824
reputation1090731042
created2018-01-07T12:59:45
recovery_accountsteem
proxyNone
post_count15
comment_count0
lifetime_vote_count0
witnesses_voted_for0
last_post2018-01-14T13:10:03
last_root_post2018-01-14T13:10:03
last_vote_time2018-01-14T13:10:03
proxied_vsf_votes0, 0, 0, 0
can_vote1
voting_power0
delayed_votes0
balance0.001 STEEM
savings_balance0.000 STEEM
sbd_balance0.252 SBD
savings_sbd_balance0.000 SBD
vesting_shares1116.407890 VESTS
delegated_vesting_shares0.000000 VESTS
received_vesting_shares7027.251916 VESTS
reward_vesting_balance0.000000 VESTS
vesting_balance0.000 STEEM
vesting_withdraw_rate0.000000 VESTS
next_vesting_withdrawal1969-12-31T23:59:59
withdrawn0
to_withdraw0
withdraw_routes0
savings_withdraw_requests0
last_account_recovery1970-01-01T00:00:00
reset_accountnull
last_owner_update1970-01-01T00:00:00
last_account_update2018-01-07T17:54:51
minedNo
sbd_seconds0
sbd_last_interest_payment1970-01-01T00:00:00
savings_sbd_last_interest_payment1970-01-01T00:00:00
{
  "id": 576795,
  "name": "flocksserver",
  "owner": {
    "weight_threshold": 1,
    "account_auths": [],
    "key_auths": [
      [
        "STM6wcFAv27Ug2hKwDvdRbtBMnWvMCbsDg9PxjaCA3hDaHAMHdD6u",
        1
      ]
    ]
  },
  "active": {
    "weight_threshold": 1,
    "account_auths": [],
    "key_auths": [
      [
        "STM8KBT8BGAXcT7DafzUDQFJEyawb6WaAEaLA1XhdBtB4pAtUbu8W",
        1
      ]
    ]
  },
  "posting": {
    "weight_threshold": 1,
    "account_auths": [
      [
        "busy.app",
        1
      ],
      [
        "dtube.app",
        1
      ]
    ],
    "key_auths": [
      [
        "STM7rM4tq6gUuTEinbw4LKnm2vZN2BvABBECuTFgbpG1vxN4vjAcD",
        1
      ]
    ]
  },
  "memo_key": "STM7NEJuUQXhDpZmKjfeAkbMqfdDj2q131szvdV3Vk8ZAu5uaEgL9",
  "json_metadata": "{\"profile\":{\"profile_image\":\"http://flocksserver.de/img/profile.png\",\"name\":\"Flocksserver\",\"website\":\"http://flocksserver.de\"}}",
  "posting_json_metadata": "{\"profile\":{\"profile_image\":\"http://flocksserver.de/img/profile.png\",\"name\":\"Flocksserver\",\"website\":\"http://flocksserver.de\"}}",
  "proxy": "",
  "last_owner_update": "1970-01-01T00:00:00",
  "last_account_update": "2018-01-07T17:54:51",
  "created": "2018-01-07T12:59:45",
  "mined": false,
  "recovery_account": "steem",
  "last_account_recovery": "1970-01-01T00:00:00",
  "reset_account": "null",
  "comment_count": 0,
  "lifetime_vote_count": 0,
  "post_count": 15,
  "can_vote": true,
  "voting_manabar": {
    "current_mana": "8143659806",
    "last_update_time": 1779063687
  },
  "downvote_manabar": {
    "current_mana": 2035914951,
    "last_update_time": 1779063687
  },
  "voting_power": 0,
  "balance": "0.001 STEEM",
  "savings_balance": "0.000 STEEM",
  "sbd_balance": "0.252 SBD",
  "sbd_seconds": "0",
  "sbd_seconds_last_update": "2018-01-26T06:44:06",
  "sbd_last_interest_payment": "1970-01-01T00:00:00",
  "savings_sbd_balance": "0.000 SBD",
  "savings_sbd_seconds": "0",
  "savings_sbd_seconds_last_update": "1970-01-01T00:00:00",
  "savings_sbd_last_interest_payment": "1970-01-01T00:00:00",
  "savings_withdraw_requests": 0,
  "reward_sbd_balance": "0.000 SBD",
  "reward_steem_balance": "0.000 STEEM",
  "reward_vesting_balance": "0.000000 VESTS",
  "reward_vesting_steem": "0.000 STEEM",
  "vesting_shares": "1116.407890 VESTS",
  "delegated_vesting_shares": "0.000000 VESTS",
  "received_vesting_shares": "7027.251916 VESTS",
  "vesting_withdraw_rate": "0.000000 VESTS",
  "next_vesting_withdrawal": "1969-12-31T23:59:59",
  "withdrawn": 0,
  "to_withdraw": 0,
  "withdraw_routes": 0,
  "curation_rewards": 0,
  "posting_rewards": 89,
  "proxied_vsf_votes": [
    0,
    0,
    0,
    0
  ],
  "witnesses_voted_for": 0,
  "last_post": "2018-01-14T13:10:03",
  "last_root_post": "2018-01-14T13:10:03",
  "last_vote_time": "2018-01-14T13:10:03",
  "post_bandwidth": 0,
  "pending_claimed_accounts": 0,
  "vesting_balance": "0.000 STEEM",
  "reputation": 1090731042,
  "transfer_history": [],
  "market_history": [],
  "post_history": [],
  "vote_history": [],
  "other_history": [],
  "witness_votes": [],
  "tags_usage": [],
  "guest_bloggers": [],
  "rank": 714824
}

Withdraw Routes

IncomingOutgoing
Empty
Empty
{
  "incoming": [],
  "outgoing": []
}
From Date
To Date
steemdelegated 4.321 SP to @flocksserver
2026/05/18 00:21:27
delegateeflocksserver
delegatorsteem
vesting shares7027.251916 VESTS
Transaction InfoBlock #106143574/Trx 57a1d7a9ae9789990bce5e15a2198f2994d99a61
View Raw JSON Data
{
  "block": 106143574,
  "op": [
    "delegate_vesting_shares",
    {
      "delegatee": "flocksserver",
      "delegator": "steem",
      "vesting_shares": "7027.251916 VESTS"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2026-05-18T00:21:27",
  "trx_id": "57a1d7a9ae9789990bce5e15a2198f2994d99a61",
  "trx_in_block": 0,
  "virtual_op": 0
}
steemdelegated 2.653 SP to @flocksserver
2026/05/12 04:16:09
delegateeflocksserver
delegatorsteem
vesting shares4315.041511 VESTS
Transaction InfoBlock #105976225/Trx 09445a3fb6d99f1ca799704ca79a2253d023835d
View Raw JSON Data
{
  "block": 105976225,
  "op": [
    "delegate_vesting_shares",
    {
      "delegatee": "flocksserver",
      "delegator": "steem",
      "vesting_shares": "4315.041511 VESTS"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2026-05-12T04:16:09",
  "trx_id": "09445a3fb6d99f1ca799704ca79a2253d023835d",
  "trx_in_block": 1,
  "virtual_op": 0
}
steemdelegated 4.329 SP to @flocksserver
2026/04/25 23:42:09
delegateeflocksserver
delegatorsteem
vesting shares7039.767672 VESTS
Transaction InfoBlock #105511221/Trx 0daff22f40d4de8045cb31bb940a16fc79fb5225
View Raw JSON Data
{
  "block": 105511221,
  "op": [
    "delegate_vesting_shares",
    {
      "delegatee": "flocksserver",
      "delegator": "steem",
      "vesting_shares": "7039.767672 VESTS"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2026-04-25T23:42:09",
  "trx_id": "0daff22f40d4de8045cb31bb940a16fc79fb5225",
  "trx_in_block": 0,
  "virtual_op": 0
}
steemdelegated 2.679 SP to @flocksserver
2026/01/23 08:05:12
delegateeflocksserver
delegatorsteem
vesting shares4356.588330 VESTS
Transaction InfoBlock #102852151/Trx aa3ec24ce7899317e80182b34bcb29bca54e54ff
View Raw JSON Data
{
  "block": 102852151,
  "op": [
    "delegate_vesting_shares",
    {
      "delegatee": "flocksserver",
      "delegator": "steem",
      "vesting_shares": "4356.588330 VESTS"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2026-01-23T08:05:12",
  "trx_id": "aa3ec24ce7899317e80182b34bcb29bca54e54ff",
  "trx_in_block": 5,
  "virtual_op": 0
}
steemdelegated 2.780 SP to @flocksserver
2024/12/17 03:24:03
delegateeflocksserver
delegatorsteem
vesting shares4520.807527 VESTS
Transaction InfoBlock #91298555/Trx cac49d9f082e688a5d17eb7c5215582570fa72c4
View Raw JSON Data
{
  "block": 91298555,
  "op": [
    "delegate_vesting_shares",
    {
      "delegatee": "flocksserver",
      "delegator": "steem",
      "vesting_shares": "4520.807527 VESTS"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2024-12-17T03:24:03",
  "trx_id": "cac49d9f082e688a5d17eb7c5215582570fa72c4",
  "trx_in_block": 2,
  "virtual_op": 0
}
steemdelegated 2.884 SP to @flocksserver
2023/11/13 19:06:57
delegateeflocksserver
delegatorsteem
vesting shares4689.941059 VESTS
Transaction InfoBlock #79852754/Trx 36ba2f2e3e2b4cc304797bd9cef32273678cab79
View Raw JSON Data
{
  "block": 79852754,
  "op": [
    "delegate_vesting_shares",
    {
      "delegatee": "flocksserver",
      "delegator": "steem",
      "vesting_shares": "4689.941059 VESTS"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2023-11-13T19:06:57",
  "trx_id": "36ba2f2e3e2b4cc304797bd9cef32273678cab79",
  "trx_in_block": 2,
  "virtual_op": 0
}
steemdelegated 4.690 SP to @flocksserver
2023/09/21 21:57:06
delegateeflocksserver
delegatorsteem
vesting shares7627.219845 VESTS
Transaction InfoBlock #78347973/Trx fbd26ffbec1711c8161a0d65d55ce951bd48e25e
View Raw JSON Data
{
  "block": 78347973,
  "op": [
    "delegate_vesting_shares",
    {
      "delegatee": "flocksserver",
      "delegator": "steem",
      "vesting_shares": "7627.219845 VESTS"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2023-09-21T21:57:06",
  "trx_id": "fbd26ffbec1711c8161a0d65d55ce951bd48e25e",
  "trx_in_block": 2,
  "virtual_op": 0
}
steemdelegated 4.826 SP to @flocksserver
2022/11/03 11:43:51
delegateeflocksserver
delegatorsteem
vesting shares7848.901283 VESTS
Transaction InfoBlock #69113293/Trx 3f2bfea7eb0438f99f93e938ff3b239ba499e70c
View Raw JSON Data
{
  "block": 69113293,
  "op": [
    "delegate_vesting_shares",
    {
      "delegatee": "flocksserver",
      "delegator": "steem",
      "vesting_shares": "7848.901283 VESTS"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2022-11-03T11:43:51",
  "trx_id": "3f2bfea7eb0438f99f93e938ff3b239ba499e70c",
  "trx_in_block": 0,
  "virtual_op": 0
}
steemdelegated 4.962 SP to @flocksserver
2022/01/17 10:59:45
delegateeflocksserver
delegatorsteem
vesting shares8069.434514 VESTS
Transaction InfoBlock #60809459/Trx 27abf3e8956855d85f3c1ed9288a09796cf2e1f2
View Raw JSON Data
{
  "block": 60809459,
  "op": [
    "delegate_vesting_shares",
    {
      "delegatee": "flocksserver",
      "delegator": "steem",
      "vesting_shares": "8069.434514 VESTS"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2022-01-17T10:59:45",
  "trx_id": "27abf3e8956855d85f3c1ed9288a09796cf2e1f2",
  "trx_in_block": 18,
  "virtual_op": 0
}
steemdelegated 5.075 SP to @flocksserver
2021/06/14 00:54:51
delegateeflocksserver
delegatorsteem
vesting shares8253.203172 VESTS
Transaction InfoBlock #54607844/Trx d443b9b6833c49fbe7ea4e86f240f0d8eb6cda28
View Raw JSON Data
{
  "block": 54607844,
  "op": [
    "delegate_vesting_shares",
    {
      "delegatee": "flocksserver",
      "delegator": "steem",
      "vesting_shares": "8253.203172 VESTS"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2021-06-14T00:54:51",
  "trx_id": "d443b9b6833c49fbe7ea4e86f240f0d8eb6cda28",
  "trx_in_block": 2,
  "virtual_op": 0
}
steemdelegated 5.190 SP to @flocksserver
2020/12/11 11:13:18
delegateeflocksserver
delegatorsteem
vesting shares8440.625146 VESTS
Transaction InfoBlock #49355294/Trx fd89b14bdb3125e29d99d34746a30dd84ea1368d
View Raw JSON Data
{
  "block": 49355294,
  "op": [
    "delegate_vesting_shares",
    {
      "delegatee": "flocksserver",
      "delegator": "steem",
      "vesting_shares": "8440.625146 VESTS"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2020-12-11T11:13:18",
  "trx_id": "fd89b14bdb3125e29d99d34746a30dd84ea1368d",
  "trx_in_block": 2,
  "virtual_op": 0
}
steemdelegated 1.176 SP to @flocksserver
2020/12/06 04:50:33
delegateeflocksserver
delegatorsteem
vesting shares1912.543513 VESTS
Transaction InfoBlock #49206856/Trx c15a5f23b1532e1946e823280cf492adc9811f4e
View Raw JSON Data
{
  "block": 49206856,
  "op": [
    "delegate_vesting_shares",
    {
      "delegatee": "flocksserver",
      "delegator": "steem",
      "vesting_shares": "1912.543513 VESTS"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2020-12-06T04:50:33",
  "trx_id": "c15a5f23b1532e1946e823280cf492adc9811f4e",
  "trx_in_block": 1,
  "virtual_op": 0
}
steemdelegated 5.194 SP to @flocksserver
2020/12/05 14:51:30
delegateeflocksserver
delegatorsteem
vesting shares8446.833000 VESTS
Transaction InfoBlock #49190390/Trx eb430d8549097c836602bc4990080b23cec0ce06
View Raw JSON Data
{
  "block": 49190390,
  "op": [
    "delegate_vesting_shares",
    {
      "delegatee": "flocksserver",
      "delegator": "steem",
      "vesting_shares": "8446.833000 VESTS"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2020-12-05T14:51:30",
  "trx_id": "eb430d8549097c836602bc4990080b23cec0ce06",
  "trx_in_block": 2,
  "virtual_op": 0
}
steemdelegated 1.181 SP to @flocksserver
2020/11/02 15:50:30
delegateeflocksserver
delegatorsteem
vesting shares1920.017158 VESTS
Transaction InfoBlock #48258041/Trx 7ec5f36929b4515daadb83334e13e8c14ccb6620
View Raw JSON Data
{
  "block": 48258041,
  "op": [
    "delegate_vesting_shares",
    {
      "delegatee": "flocksserver",
      "delegator": "steem",
      "vesting_shares": "1920.017158 VESTS"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2020-11-02T15:50:30",
  "trx_id": "7ec5f36929b4515daadb83334e13e8c14ccb6620",
  "trx_in_block": 1,
  "virtual_op": 0
}
steemdelegated 5.319 SP to @flocksserver
2020/05/09 05:47:54
delegateeflocksserver
delegatorsteem
vesting shares8649.638359 VESTS
Transaction InfoBlock #43217105/Trx 263fe1f0d800217e494a199732a1962656c0ba86
View Raw JSON Data
{
  "block": 43217105,
  "op": [
    "delegate_vesting_shares",
    {
      "delegatee": "flocksserver",
      "delegator": "steem",
      "vesting_shares": "8649.638359 VESTS"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2020-05-09T05:47:54",
  "trx_id": "263fe1f0d800217e494a199732a1962656c0ba86",
  "trx_in_block": 4,
  "virtual_op": 0
}
steemdelegated 1.201 SP to @flocksserver
2020/05/08 09:24:57
delegateeflocksserver
delegatorsteem
vesting shares1953.311140 VESTS
Transaction InfoBlock #43193221/Trx 64216d98f3981ba4e0b638bfb664b6e1cbbf22ed
View Raw JSON Data
{
  "block": 43193221,
  "op": [
    "delegate_vesting_shares",
    {
      "delegatee": "flocksserver",
      "delegator": "steem",
      "vesting_shares": "1953.311140 VESTS"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2020-05-08T09:24:57",
  "trx_id": "64216d98f3981ba4e0b638bfb664b6e1cbbf22ed",
  "trx_in_block": 3,
  "virtual_op": 0
}
steemdelegated 5.327 SP to @flocksserver
2020/04/15 21:39:30
delegateeflocksserver
delegatorsteem
vesting shares8662.615778 VESTS
Transaction InfoBlock #42562611/Trx 9cd60ebffecc2cd9308ac3b150ab07aa24eb73af
View Raw JSON Data
{
  "block": 42562611,
  "op": [
    "delegate_vesting_shares",
    {
      "delegatee": "flocksserver",
      "delegator": "steem",
      "vesting_shares": "8662.615778 VESTS"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2020-04-15T21:39:30",
  "trx_id": "9cd60ebffecc2cd9308ac3b150ab07aa24eb73af",
  "trx_in_block": 8,
  "virtual_op": 0
}
2020/01/07 14:03:18
authorsteemitboard
bodyCongratulations @flocksserver! You received a personal award! <table><tr><td>https://steemitimages.com/70x70/http://steemitboard.com/@flocksserver/birthday2.png</td><td>Happy Birthday! - You are on the Steem blockchain for 2 years!</td></tr></table> <sub>_You can view [your badges on your Steem Board](https://steemitboard.com/@flocksserver) and compare to others on the [Steem Ranking](https://steemitboard.com/ranking/index.php?name=flocksserver)_</sub> ###### [Vote for @Steemitboard as a witness](https://v2.steemconnect.com/sign/account-witness-vote?witness=steemitboard&approve=1) to get one more award and increased upvotes!
json metadata{"image":["https://steemitboard.com/img/notify.png"]}
parent authorflocksserver
parent permlinkcatcher-game-tutorial-level-8
permlinksteemitboard-notify-flocksserver-20200107t140317000z
title
Transaction InfoBlock #39721649/Trx 7bdef55cd2511a2ba2781f260da7ddb0a23a3305
View Raw JSON Data
{
  "block": 39721649,
  "op": [
    "comment",
    {
      "author": "steemitboard",
      "body": "Congratulations @flocksserver! You received a personal award!\n\n<table><tr><td>https://steemitimages.com/70x70/http://steemitboard.com/@flocksserver/birthday2.png</td><td>Happy Birthday! - You are on the Steem blockchain for 2 years!</td></tr></table>\n\n<sub>_You can view [your badges on your Steem Board](https://steemitboard.com/@flocksserver) and compare to others on the [Steem Ranking](https://steemitboard.com/ranking/index.php?name=flocksserver)_</sub>\n\n\n###### [Vote for @Steemitboard as a witness](https://v2.steemconnect.com/sign/account-witness-vote?witness=steemitboard&approve=1) to get one more award and increased upvotes!",
      "json_metadata": "{\"image\":[\"https://steemitboard.com/img/notify.png\"]}",
      "parent_author": "flocksserver",
      "parent_permlink": "catcher-game-tutorial-level-8",
      "permlink": "steemitboard-notify-flocksserver-20200107t140317000z",
      "title": ""
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2020-01-07T14:03:18",
  "trx_id": "7bdef55cd2511a2ba2781f260da7ddb0a23a3305",
  "trx_in_block": 24,
  "virtual_op": 0
}
dtubesent 0.001 STEEM to @flocksserver- "Time is running out, claim your DTube account now before anyone else can! Login at https://d.tube"
2019/08/22 16:27:24
amount0.001 STEEM
fromdtube
memoTime is running out, claim your DTube account now before anyone else can! Login at https://d.tube
toflocksserver
Transaction InfoBlock #35779757/Trx 92bcd081511b667e697f9e7852e840ccff59a6ee
View Raw JSON Data
{
  "block": 35779757,
  "op": [
    "transfer",
    {
      "amount": "0.001 STEEM",
      "from": "dtube",
      "memo": "Time is running out, claim your DTube account now before anyone else can! Login at https://d.tube",
      "to": "flocksserver"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2019-08-22T16:27:24",
  "trx_id": "92bcd081511b667e697f9e7852e840ccff59a6ee",
  "trx_in_block": 9,
  "virtual_op": 0
}
steemdelegated 5.447 SP to @flocksserver
2019/05/12 14:54:21
delegateeflocksserver
delegatorsteem
vesting shares8858.238583 VESTS
Transaction InfoBlock #32845490/Trx e14edf97cdefb13b101c1bef44c48958da2e1eb9
View Raw JSON Data
{
  "block": 32845490,
  "op": [
    "delegate_vesting_shares",
    {
      "delegatee": "flocksserver",
      "delegator": "steem",
      "vesting_shares": "8858.238583 VESTS"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2019-05-12T14:54:21",
  "trx_id": "e14edf97cdefb13b101c1bef44c48958da2e1eb9",
  "trx_in_block": 45,
  "virtual_op": 0
}
2019/01/07 18:48:27
authorsteemitboard
bodyCongratulations @flocksserver! You received a personal award! <table><tr><td>https://steemitimages.com/70x70/http://steemitboard.com/@flocksserver/birthday1.png</td><td>1 Year on Steemit</td></tr></table> <sub>_[Click here to view your Board](https://steemitboard.com/@flocksserver)_</sub> **Do not miss the last post from @steemitboard:** <table><tr><td><a href="https://steemit.com/steemitboard/@steemitboard/steemitboard-witness-update-2019-01-07"><img src="https://steemitimages.com/64x128/http://i.cubeupload.com/7CiQEO.png"></a></td><td><a href="https://steemit.com/steemitboard/@steemitboard/steemitboard-witness-update-2019-01-07">SteemitBoard - Witness Update</a></td></tr></table> > Support [SteemitBoard's project](https://steemit.com/@steemitboard)! **[Vote for its witness](https://v2.steemconnect.com/sign/account-witness-vote?witness=steemitboard&approve=1)** and **get one more award**!
json metadata{"image":["https://steemitboard.com/img/notify.png"]}
parent authorflocksserver
parent permlinkcatcher-game-tutorial-level-8
permlinksteemitboard-notify-flocksserver-20190107t184826000z
title
Transaction InfoBlock #29254316/Trx 4cedf077f3c579a493e79f5dadb471de43e4bb57
View Raw JSON Data
{
  "block": 29254316,
  "op": [
    "comment",
    {
      "author": "steemitboard",
      "body": "Congratulations @flocksserver! You received a personal award!\n\n<table><tr><td>https://steemitimages.com/70x70/http://steemitboard.com/@flocksserver/birthday1.png</td><td>1 Year on Steemit</td></tr></table>\n\n<sub>_[Click here to view your Board](https://steemitboard.com/@flocksserver)_</sub>\n\n\n**Do not miss the last post from @steemitboard:**\n<table><tr><td><a href=\"https://steemit.com/steemitboard/@steemitboard/steemitboard-witness-update-2019-01-07\"><img src=\"https://steemitimages.com/64x128/http://i.cubeupload.com/7CiQEO.png\"></a></td><td><a href=\"https://steemit.com/steemitboard/@steemitboard/steemitboard-witness-update-2019-01-07\">SteemitBoard - Witness Update</a></td></tr></table>\n\n> Support [SteemitBoard's project](https://steemit.com/@steemitboard)! **[Vote for its witness](https://v2.steemconnect.com/sign/account-witness-vote?witness=steemitboard&approve=1)** and **get one more award**!",
      "json_metadata": "{\"image\":[\"https://steemitboard.com/img/notify.png\"]}",
      "parent_author": "flocksserver",
      "parent_permlink": "catcher-game-tutorial-level-8",
      "permlink": "steemitboard-notify-flocksserver-20190107t184826000z",
      "title": ""
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2019-01-07T18:48:27",
  "trx_id": "4cedf077f3c579a493e79f5dadb471de43e4bb57",
  "trx_in_block": 13,
  "virtual_op": 0
}
steemdelegated 5.570 SP to @flocksserver
2018/05/16 20:17:30
delegateeflocksserver
delegatorsteem
vesting shares9057.791018 VESTS
Transaction InfoBlock #22489851/Trx 73d8ce1453c0b2a4f7d2780e01ff9e71f4746f24
View Raw JSON Data
{
  "block": 22489851,
  "op": [
    "delegate_vesting_shares",
    {
      "delegatee": "flocksserver",
      "delegator": "steem",
      "vesting_shares": "9057.791018 VESTS"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-05-16T20:17:30",
  "trx_id": "73d8ce1453c0b2a4f7d2780e01ff9e71f4746f24",
  "trx_in_block": 13,
  "virtual_op": 0
}
2018/04/02 10:10:24
authorflocksserver
permlinkkanban-papierflieger-spiel
voterstarglow
weight10000 (100.00%)
Transaction InfoBlock #21211377/Trx a18c018067209e7d9085ce9c613589bafe4e7570
View Raw JSON Data
{
  "block": 21211377,
  "op": [
    "vote",
    {
      "author": "flocksserver",
      "permlink": "kanban-papierflieger-spiel",
      "voter": "starglow",
      "weight": 10000
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-04-02T10:10:24",
  "trx_id": "a18c018067209e7d9085ce9c613589bafe4e7570",
  "trx_in_block": 26,
  "virtual_op": 0
}
2018/04/02 10:09:45
authorflocksserver
permlinkkanban-papierflieger-spiel
voterstarglow
weight10000 (100.00%)
Transaction InfoBlock #21211364/Trx e1149049dced1ea4a3dd27e49d2c7b60a4f5dc44
View Raw JSON Data
{
  "block": 21211364,
  "op": [
    "vote",
    {
      "author": "flocksserver",
      "permlink": "kanban-papierflieger-spiel",
      "voter": "starglow",
      "weight": 10000
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-04-02T10:09:45",
  "trx_id": "e1149049dced1ea4a3dd27e49d2c7b60a4f5dc44",
  "trx_in_block": 19,
  "virtual_op": 0
}
steemdelegated 18.137 SP to @flocksserver
2018/03/21 17:20:57
delegateeflocksserver
delegatorsteem
vesting shares29495.814100 VESTS
Transaction InfoBlock #20874857/Trx 598526a5723fa4bee72a9fb7f86c5602460a9785
View Raw JSON Data
{
  "block": 20874857,
  "op": [
    "delegate_vesting_shares",
    {
      "delegatee": "flocksserver",
      "delegator": "steem",
      "vesting_shares": "29495.814100 VESTS"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-03-21T17:20:57",
  "trx_id": "598526a5723fa4bee72a9fb7f86c5602460a9785",
  "trx_in_block": 14,
  "virtual_op": 0
}
2018/03/06 03:50:42
authorupv0t3
bodyHello @flocksserver, upv0t3 This is a <b>free</b> service for new steemit users, to support them and motivate them to continue generating valuable content for the community. <3 This is a heart, or an ice cream, you choose. <h1>:) </h1> R4ND0M: 1566 6585 7656 9347 2734 8155 4306 7077 7641 1483 4414 2716 2004 9791 2803 8033
json metadata{"tags":["spanish","kame"],"users":["flocksserver"],"app":"null/null","format":"markdown"}
parent authorflocksserver
parent permlinkcatcher-game-tutorial-level-8
permlinkre-flocksserver-catcher-game-tutorial-level-8-1520308242054t44010d60-ce5c-47ab-82bb-77228a606d00uid
title
Transaction InfoBlock #20427578/Trx 0f08ec3f2a589284c64f48e149a1264aa3e39dee
View Raw JSON Data
{
  "block": 20427578,
  "op": [
    "comment",
    {
      "author": "upv0t3",
      "body": "Hello @flocksserver, upv0t3\r\nThis is a <b>free</b> service for new steemit users, to support them and motivate them to continue generating valuable content for the community.\r\n<3 This is a heart, or an ice cream, you choose.\r\n\r\n<h1>:) </h1>\r\nR4ND0M:\r\n1566 6585 7656 9347\n2734 8155 4306 7077\n7641 1483 4414 2716\n2004 9791 2803 8033\n",
      "json_metadata": "{\"tags\":[\"spanish\",\"kame\"],\"users\":[\"flocksserver\"],\"app\":\"null/null\",\"format\":\"markdown\"}",
      "parent_author": "flocksserver",
      "parent_permlink": "catcher-game-tutorial-level-8",
      "permlink": "re-flocksserver-catcher-game-tutorial-level-8-1520308242054t44010d60-ce5c-47ab-82bb-77228a606d00uid",
      "title": ""
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-03-06T03:50:42",
  "trx_id": "0f08ec3f2a589284c64f48e149a1264aa3e39dee",
  "trx_in_block": 69,
  "virtual_op": 0
}
2018/03/06 03:50:42
authorflocksserver
permlinkcatcher-game-tutorial-level-8
voterupv0t3
weight2200 (22.00%)
Transaction InfoBlock #20427578/Trx d244e15c8c1f01c379e0489a1e519356e7e18e9f
View Raw JSON Data
{
  "block": 20427578,
  "op": [
    "vote",
    {
      "author": "flocksserver",
      "permlink": "catcher-game-tutorial-level-8",
      "voter": "upv0t3",
      "weight": 2200
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-03-06T03:50:42",
  "trx_id": "d244e15c8c1f01c379e0489a1e519356e7e18e9f",
  "trx_in_block": 15,
  "virtual_op": 0
}
flocksserverclaimed reward balance: 0.252 SBD, 0.057 SP
2018/01/26 06:44:06
accountflocksserver
reward sbd0.252 SBD
reward steem0.000 STEEM
reward vests92.147665 VESTS
Transaction InfoBlock #19308993/Trx dbe92f18293585a5a4236a93599b5a727bb0663a
View Raw JSON Data
{
  "block": 19308993,
  "op": [
    "claim_reward_balance",
    {
      "account": "flocksserver",
      "reward_sbd": "0.252 SBD",
      "reward_steem": "0.000 STEEM",
      "reward_vests": "92.147665 VESTS"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-26T06:44:06",
  "trx_id": "dbe92f18293585a5a4236a93599b5a727bb0663a",
  "trx_in_block": 38,
  "virtual_op": 0
}
flocksserverreceived 0.220 SBD, 0.048 SP author reward for @flocksserver / catcher-game-tutorial-level-1
2018/01/15 16:22:48
authorflocksserver
permlinkcatcher-game-tutorial-level-1
sbd payout0.220 SBD
steem payout0.000 STEEM
vesting payout77.812980 VESTS
Transaction InfoBlock #19003888/Virtual Operation #13
View Raw JSON Data
{
  "block": 19003888,
  "op": [
    "author_reward",
    {
      "author": "flocksserver",
      "permlink": "catcher-game-tutorial-level-1",
      "sbd_payout": "0.220 SBD",
      "steem_payout": "0.000 STEEM",
      "vesting_payout": "77.812980 VESTS"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-15T16:22:48",
  "trx_id": "0000000000000000000000000000000000000000",
  "trx_in_block": 4294967295,
  "virtual_op": 13
}
flocksserverreceived 0.016 SBD, 0.004 SP author reward for @flocksserver / kanban-papierflieger-spiel
2018/01/14 18:16:18
authorflocksserver
permlinkkanban-papierflieger-spiel
sbd payout0.016 SBD
steem payout0.000 STEEM
vesting payout6.143406 VESTS
Transaction InfoBlock #18977389/Virtual Operation #24
View Raw JSON Data
{
  "block": 18977389,
  "op": [
    "author_reward",
    {
      "author": "flocksserver",
      "permlink": "kanban-papierflieger-spiel",
      "sbd_payout": "0.016 SBD",
      "steem_payout": "0.000 STEEM",
      "vesting_payout": "6.143406 VESTS"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-14T18:16:18",
  "trx_id": "0000000000000000000000000000000000000000",
  "trx_in_block": 4294967295,
  "virtual_op": 24
}
flocksserverreceived 0.016 SBD, 0.005 SP author reward for @flocksserver / nfc-mifare-1k-4k-hacking
2018/01/14 14:01:15
authorflocksserver
permlinknfc-mifare-1k-4k-hacking
sbd payout0.016 SBD
steem payout0.000 STEEM
vesting payout8.191279 VESTS
Transaction InfoBlock #18972289/Virtual Operation #8
View Raw JSON Data
{
  "block": 18972289,
  "op": [
    "author_reward",
    {
      "author": "flocksserver",
      "permlink": "nfc-mifare-1k-4k-hacking",
      "sbd_payout": "0.016 SBD",
      "steem_payout": "0.000 STEEM",
      "vesting_payout": "8.191279 VESTS"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-14T14:01:15",
  "trx_id": "0000000000000000000000000000000000000000",
  "trx_in_block": 4294967295,
  "virtual_op": 8
}
2018/01/14 13:10:03
authorflocksserver
permlinkcatcher-game-tutorial-level-8
voterflocksserver
weight10000 (100.00%)
Transaction InfoBlock #18971266/Trx d6156003dacfdbc494faa19c377662637ffb840b
View Raw JSON Data
{
  "block": 18971266,
  "op": [
    "vote",
    {
      "author": "flocksserver",
      "permlink": "catcher-game-tutorial-level-8",
      "voter": "flocksserver",
      "weight": 10000
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-14T13:10:03",
  "trx_id": "d6156003dacfdbc494faa19c377662637ffb840b",
  "trx_in_block": 12,
  "virtual_op": 0
}
2018/01/14 13:10:03
authorflocksserver
body# ENDE Das war es, jetzt bist du dran mit dem Weiterentwickeln der Anwendung. Hast du noch Ideen? Ich habe unten in einer Liste einige mögliche Erweiterungen aufgelistet. Mit dem Abschluss meines Tutorials hast du nun viele Grundlagen zur Programmierung mitgenommen und kannst auch dein ganz eigenes Spiel anfangen und umsetzen. Der Kreativität sind keine Grenzen gesetzt. ## Mögliche Erweiterungen - Verschiedene herunterfallende Objekte, die mehr Punkte oder minus Punkte geben oder andere positive/negative Effekte verursachen. Mögliche Effekte: Denkbar ist die Größe des *Catchers* zu verändern oder Leben dazuzubekommen. - Mehr Schwierigkeitsstufen einbauen - Umbauen in 3D - Highscores speichern und anzeigen - Steuerung des *Catchers* über die [Sensoren](http://android.processing.org/tutorials/sensors/index.html) des Android-Smartphones - Icons hinzufügen - Android-App signieren und kompilieren, um diese Freunden zum Installieren zu geben. - ... # Schlusswort Bitte teile mir doch mit wenn du dieses Tutorial genutzt und nachverfolgt hast. Ich würde mich sehr darüber freuen. Außerdem kannst du mir gerne dazu Rückmeldung geben was gut und was nicht so gut funktioniert hat. Dann kann ich das Tutorial immer weiter verbessern. Auch wenn du noch weitere Ideen dazu hast schreibe mir gerne. [Github Repository Catcher](https://github.com/Flocksserver/CatcherTutorial) [Github Repository Tutorial](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level8/Processing_Tutorial_Level_%238-CatcherGameTutorial.md)
json metadata{"tags":["programming","processing","java","tutorial"],"links":["http://android.processing.org/tutorials/sensors/index.html","https://github.com/Flocksserver/CatcherTutorial","https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level8/Processing_Tutorial_Level_%238-CatcherGameTutorial.md"],"app":"steemit/0.1","format":"markdown"}
parent author
parent permlinkprogramming
permlinkcatcher-game-tutorial-level-8
titleCatcher Game Tutorial Level 8
Transaction InfoBlock #18971266/Trx d6156003dacfdbc494faa19c377662637ffb840b
View Raw JSON Data
{
  "block": 18971266,
  "op": [
    "comment",
    {
      "author": "flocksserver",
      "body": "# ENDE\nDas war es, jetzt bist du dran mit dem Weiterentwickeln der Anwendung. Hast du noch Ideen? Ich habe unten in einer Liste einige mögliche Erweiterungen aufgelistet. Mit dem Abschluss meines Tutorials hast du nun viele Grundlagen zur Programmierung mitgenommen und kannst auch dein ganz eigenes Spiel anfangen und umsetzen. Der Kreativität sind keine Grenzen gesetzt.\n\n## Mögliche Erweiterungen\n- Verschiedene herunterfallende Objekte, die mehr Punkte oder minus Punkte geben oder andere positive/negative Effekte verursachen. Mögliche Effekte: Denkbar ist die Größe des *Catchers* zu verändern oder Leben dazuzubekommen.\n- Mehr Schwierigkeitsstufen einbauen\n- Umbauen in 3D\n- Highscores speichern und anzeigen\n- Steuerung des *Catchers* über die [Sensoren](http://android.processing.org/tutorials/sensors/index.html) des Android-Smartphones\n- Icons hinzufügen\n- Android-App signieren und kompilieren, um diese Freunden zum Installieren zu geben.\n- ...\n\n# Schlusswort\nBitte teile mir doch mit wenn du dieses Tutorial genutzt und nachverfolgt hast. Ich würde mich sehr darüber freuen. Außerdem kannst du mir gerne dazu Rückmeldung geben was gut und was nicht so gut funktioniert hat. Dann kann ich das Tutorial immer weiter verbessern. Auch wenn du noch weitere Ideen dazu hast schreibe mir gerne.\n\n\n[Github Repository Catcher](https://github.com/Flocksserver/CatcherTutorial)\n[Github Repository Tutorial](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level8/Processing_Tutorial_Level_%238-CatcherGameTutorial.md)",
      "json_metadata": "{\"tags\":[\"programming\",\"processing\",\"java\",\"tutorial\"],\"links\":[\"http://android.processing.org/tutorials/sensors/index.html\",\"https://github.com/Flocksserver/CatcherTutorial\",\"https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level8/Processing_Tutorial_Level_%238-CatcherGameTutorial.md\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}",
      "parent_author": "",
      "parent_permlink": "programming",
      "permlink": "catcher-game-tutorial-level-8",
      "title": "Catcher Game Tutorial Level 8"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-14T13:10:03",
  "trx_id": "d6156003dacfdbc494faa19c377662637ffb840b",
  "trx_in_block": 12,
  "virtual_op": 0
}
2018/01/14 11:54:00
authorflocksserver
permlinkcatcher-game-tutorial-level-7
voterflocksserver
weight10000 (100.00%)
Transaction InfoBlock #18969746/Trx 9589664bfd0c38c4fa272832d224b6af48ff30ab
View Raw JSON Data
{
  "block": 18969746,
  "op": [
    "vote",
    {
      "author": "flocksserver",
      "permlink": "catcher-game-tutorial-level-7",
      "voter": "flocksserver",
      "weight": 10000
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-14T11:54:00",
  "trx_id": "9589664bfd0c38c4fa272832d224b6af48ff30ab",
  "trx_in_block": 38,
  "virtual_op": 0
}
2018/01/14 11:54:00
authorflocksserver
body# Zusammenfassung In diesem Level fügen wir neue Zustände hinzu, um das Spiel zu starten und neu zu starten. | Thema | Voraussetzungen | | --------------------- | ----------------------- | | Schwierigkeit | :star: :star: :star: | | Hardware | PC (Windows/Mac/Linux), Android-Smartphone (optional) | | Software | Browser, Internetzugang, Processing IDE | | CatcherTutorial Level | [0](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level0/Processing_Tutorial_Level_%230-CatcherGameTutorial.md),[1](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level1/Processing_Tutorial_Level_%231-CatcherGameTutorial.md),[2](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level2/Processing_Tutorial_Level_%232-CatcherGameTutorial.md),[3](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level3/Processing_Tutorial_Level_%233-CatcherGameTutorial.md),[4](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level4/Processing_Tutorial_Level_%234-CatcherGameTutorial.md),[5](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level5/Processing_Tutorial_Level_%235-CatcherGameTutorial.md),[6](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level6/Processing_Tutorial_Level_%236-CatcherGameTutorial.md) | | Programmierung | Aufruf von Funktionen, Variablen, Events (mousePressed), Bedingte Anweisung und Verzweigung (if, else)), Funktionen, for-Schleife, Klassen, Objekte, Instanzen, Konstruktor| ### Aufgabe 1 1. Erstelle einen neuen Zustand, der das Warten auf den Spielstart repräsentiert. 2. Implementiere eine Klasse, die den Startbildschirm zeigt. Es reicht fürs erste, wenn dieser Screen ein Rechteck als Button enthält, auf dem **START** steht. 3. Nun ist die Frage wie du den Button-Klick registrierst? Ganz einfach: Über die X und Y-Positionen des **mousePressed**-Events. Füge hierzu in der Einstiegsdatei auch die Y-Position mit ein. ```processing if (mousePressed) { playerPosX = mouseX; playerPosY = mouseY; } ``` 4. Wenn die X und Y-Position innerhalb des Bereiches des Rechtecks sind, wurde der Button geklickt. Leite dann in den nächsten Zustand über. [Mögliche Lösung](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level7/CatcherTutorialLevel7A1) ### Aufgabe 2 1. Erstelle einen (oder wenn nötige mehrere) Zustand/Zustände, um den erreichten Score anzuzeigen und das Spiel über einen Button neustarten zu können. 2. Implementiere eine Klasse, die den Score zeigt und den Button zum Neustart darstellt. Tipp: Beachte, dass die X und Y-Position des Spielers nicht gleich den Button-Klick auf Restart auslösen sollen, wenn dieser aus Versehen in dem korrekten Bereich im Spiel war, wo später der Restart-Button liegt. 3. Überlege dir, wie du alle Parameter des Game-Objektes (und alle, die damit zu tun haben) so zurücksetzt. [Mögliche Lösung](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level7/CatcherTutorialLevel7A2) ### Aufgabe 3 (optional) 1. Zentralisiere alle Variablen die du in der gesamten Anwendung vereinheitlicht haben möchtest in der Einstiegsdatei (Beispiel: Farben - Ich habe drei Hauptfarben. Dunkles Grau, Weiß und Gelb). ```processing color darkGrey = color(45, 50, 50); color yellow = color(255, 255, 0); ... background(darkGrey); ... c.setFill(yellow); ``` [Mögliche Lösung](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level7/CatcherTutorialLevel7A3) ### Aufgabe 4 (optional) 1. Teste und spiele die Anwendung auch auf Android [Github Repository Catcher](https://github.com/Flocksserver/CatcherTutorial) [Github Repository Tutorial](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level7/Processing_Tutorial_Level_%237-CatcherGameTutorial.md)
json metadata{"tags":["programming","processing","java","tutorial"],"links":["https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level0/Processing_Tutorial_Level_%230-CatcherGameTutorial.md","https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level1/Processing_Tutorial_Level_%231-CatcherGameTutorial.md","https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level2/Processing_Tutorial_Level_%232-CatcherGameTutorial.md","https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level3/Processing_Tutorial_Level_%233-CatcherGameTutorial.md","https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level4/Processing_Tutorial_Level_%234-CatcherGameTutorial.md","https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level5/Processing_Tutorial_Level_%235-CatcherGameTutorial.md","https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level6/Processing_Tutorial_Level_%236-CatcherGameTutorial.md","https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level7/CatcherTutorialLevel7A1","https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level7/CatcherTutorialLevel7A2","https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level7/CatcherTutorialLevel7A3","https://github.com/Flocksserver/CatcherTutorial","https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level7/Processing_Tutorial_Level_%237-CatcherGameTutorial.md"],"app":"steemit/0.1","format":"markdown"}
parent author
parent permlinkprogramming
permlinkcatcher-game-tutorial-level-7
titleCatcher Game Tutorial Level 7
Transaction InfoBlock #18969746/Trx 9589664bfd0c38c4fa272832d224b6af48ff30ab
View Raw JSON Data
{
  "block": 18969746,
  "op": [
    "comment",
    {
      "author": "flocksserver",
      "body": "# Zusammenfassung\nIn diesem Level fügen wir neue Zustände hinzu, um das Spiel zu starten und neu zu starten.\n\n| Thema                 | Voraussetzungen         |\n| --------------------- | ----------------------- |\n| Schwierigkeit         | :star: :star: :star:        |\n| Hardware              | PC (Windows/Mac/Linux), Android-Smartphone (optional)  |\n| Software              | Browser, Internetzugang, Processing IDE  |\n| CatcherTutorial Level | [0](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level0/Processing_Tutorial_Level_%230-CatcherGameTutorial.md),[1](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level1/Processing_Tutorial_Level_%231-CatcherGameTutorial.md),[2](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level2/Processing_Tutorial_Level_%232-CatcherGameTutorial.md),[3](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level3/Processing_Tutorial_Level_%233-CatcherGameTutorial.md),[4](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level4/Processing_Tutorial_Level_%234-CatcherGameTutorial.md),[5](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level5/Processing_Tutorial_Level_%235-CatcherGameTutorial.md),[6](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level6/Processing_Tutorial_Level_%236-CatcherGameTutorial.md)                        |\n| Programmierung        | Aufruf von Funktionen, Variablen,  Events (mousePressed), Bedingte Anweisung und Verzweigung (if, else)), Funktionen, for-Schleife, Klassen, Objekte, Instanzen, Konstruktor|\n\n### Aufgabe 1\n1. Erstelle einen neuen Zustand, der das Warten auf den Spielstart repräsentiert.\n2. Implementiere eine Klasse, die den Startbildschirm zeigt. Es reicht fürs erste, wenn dieser Screen ein Rechteck als Button enthält, auf dem **START** steht.\n3. Nun ist die Frage wie du den Button-Klick registrierst? Ganz einfach: Über die X und Y-Positionen des **mousePressed**-Events. Füge hierzu in der Einstiegsdatei auch die Y-Position mit ein.\n```processing\nif (mousePressed) {\n  playerPosX = mouseX;\n  playerPosY = mouseY;\n}\n```\n4. Wenn die X und Y-Position innerhalb des Bereiches des Rechtecks sind, wurde der Button geklickt. Leite dann in den nächsten Zustand über.\n\n[Mögliche Lösung](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level7/CatcherTutorialLevel7A1)\n\n### Aufgabe 2\n1. Erstelle einen (oder wenn nötige mehrere) Zustand/Zustände, um den erreichten Score anzuzeigen und das Spiel über einen Button neustarten zu können.\n2. Implementiere eine Klasse, die den Score zeigt und den Button zum Neustart darstellt. Tipp: Beachte, dass die X und Y-Position des Spielers nicht gleich den Button-Klick auf Restart auslösen sollen, wenn dieser aus Versehen in dem korrekten Bereich im Spiel war, wo später der Restart-Button liegt.\n3. Überlege dir, wie du alle Parameter des Game-Objektes (und alle, die damit zu tun haben) so zurücksetzt.\n\n[Mögliche Lösung](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level7/CatcherTutorialLevel7A2)\n\n### Aufgabe 3 (optional)\n1. Zentralisiere alle Variablen die du in der gesamten Anwendung vereinheitlicht haben möchtest in der Einstiegsdatei (Beispiel: Farben - Ich habe drei Hauptfarben. Dunkles Grau, Weiß und Gelb).\n```processing\ncolor darkGrey = color(45, 50, 50);\ncolor yellow = color(255, 255, 0);\n...\nbackground(darkGrey);\n...\nc.setFill(yellow);\n```\n\n[Mögliche Lösung](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level7/CatcherTutorialLevel7A3)\n\n### Aufgabe 4 (optional)\n1. Teste und spiele die Anwendung auch auf Android\n\n\n[Github Repository Catcher](https://github.com/Flocksserver/CatcherTutorial)\n[Github Repository Tutorial](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level7/Processing_Tutorial_Level_%237-CatcherGameTutorial.md)",
      "json_metadata": "{\"tags\":[\"programming\",\"processing\",\"java\",\"tutorial\"],\"links\":[\"https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level0/Processing_Tutorial_Level_%230-CatcherGameTutorial.md\",\"https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level1/Processing_Tutorial_Level_%231-CatcherGameTutorial.md\",\"https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level2/Processing_Tutorial_Level_%232-CatcherGameTutorial.md\",\"https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level3/Processing_Tutorial_Level_%233-CatcherGameTutorial.md\",\"https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level4/Processing_Tutorial_Level_%234-CatcherGameTutorial.md\",\"https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level5/Processing_Tutorial_Level_%235-CatcherGameTutorial.md\",\"https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level6/Processing_Tutorial_Level_%236-CatcherGameTutorial.md\",\"https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level7/CatcherTutorialLevel7A1\",\"https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level7/CatcherTutorialLevel7A2\",\"https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level7/CatcherTutorialLevel7A3\",\"https://github.com/Flocksserver/CatcherTutorial\",\"https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level7/Processing_Tutorial_Level_%237-CatcherGameTutorial.md\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}",
      "parent_author": "",
      "parent_permlink": "programming",
      "permlink": "catcher-game-tutorial-level-7",
      "title": "Catcher Game Tutorial Level 7"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-14T11:54:00",
  "trx_id": "9589664bfd0c38c4fa272832d224b6af48ff30ab",
  "trx_in_block": 38,
  "virtual_op": 0
}
2018/01/14 11:44:00
authorflocksserver
permlinkcatcher-game-tutorial-level-6
voterflocksserver
weight10000 (100.00%)
Transaction InfoBlock #18969546/Trx 35417412acc33651104391862b5d812cfeed62ef
View Raw JSON Data
{
  "block": 18969546,
  "op": [
    "vote",
    {
      "author": "flocksserver",
      "permlink": "catcher-game-tutorial-level-6",
      "voter": "flocksserver",
      "weight": 10000
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-14T11:44:00",
  "trx_id": "35417412acc33651104391862b5d812cfeed62ef",
  "trx_in_block": 35,
  "virtual_op": 0
}
2018/01/14 11:44:00
authorflocksserver
body# Zusammenfassung In diesem Level geht es um das Darstellen von Text im Fenster. Außerdem integrieren wir verschiedene Schwierigkeitsstufen in unserem Spiel. | Thema | Voraussetzungen | | --------------------- | ----------------------- | | Schwierigkeit | *** | | Hardware | PC (Windows/Mac/Linux), Android-Smartphone (optional) | | Software | Browser, Internetzugang, Processing IDE | | CatcherTutorial Level | [0](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level0/Processing_Tutorial_Level_%230-CatcherGameTutorial.md),[1](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level1/Processing_Tutorial_Level_%231-CatcherGameTutorial.md),[2](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level2/Processing_Tutorial_Level_%232-CatcherGameTutorial.md),[3](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level3/Processing_Tutorial_Level_%233-CatcherGameTutorial.md),[4](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level4/Processing_Tutorial_Level_%234-CatcherGameTutorial.md),[5](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level5/Processing_Tutorial_Level_%235-CatcherGameTutorial.md) | | Programmierung | Aufruf von Funktionen, Variablen, Events (mousePressed), Bedingte Anweisung und Verzweigung (if, else)), Funktionen, for-Schleife, Klassen, Objekte, Instanzen, Konstruktor| ### Aufgabe 1 1. Wir möchten auf dem Fenster den derzeitigen Score und die Anzahl der Leben sichtbar machen. Schaue dir die Tutorials über [Typography](https://processing.org/tutorials/typography) und [Strings and Drawing Text](https://processing.org/tutorials/text) an. 2. Erstelle eine neue Klasse, die für das Darstellen der beiden Werte zuständig ist. Platziere die Werte beliebig auf dem Spielbereich (oben links und oben rechts zum Beispiel). Die Schrift und Schriftgrößen können in der Einstiegsdatei spezifiziert werden. [Mögliche Lösung](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level6/CatcherTutorialLevel6A1) ### Aufgabe 2 1. Schön wäre es, wenn sich die Schwierigkeit mit fortgeschrittenen Punkten erhöht. Dies kann zum Beispiel durch die Fallgeschwindigkeit beeinflusst werden. Implementiere verschiedene Grenzen, an denen sich die Geschwindigkeit der herunterfallenden Objekte erhöht. [Mögliche Lösung](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level6/CatcherTutorialLevel6A2) ### Aufgabe 3 1. Derzeit kann die Anzahl der Leben negativ werden. Das sollte natürlich nicht so sein! Wir führen das Konzept eines Zustands ein. Für das Spiel gibt es derzeit zwei Zustände. *Das Spiel läuft* und *Das Spiel ist verloren*. Implementiere in der Einstiegsdatei diese zwei Zustände. Solange *Das Spiel läuft* soll die draw-Methode *execute()* aufrufen. Wenn das Spiel verloren ist, nicht mehr. Ändere den Status auf *Das Spiel ist verloren*, sobald die Lebenszahl auf 0 geht. ```processing final int stateGameRunning = 0; final int stateGameEnd = 1; int state = stateGameRunning; ``` [Mögliche Lösung](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level6/CatcherTutorialLevel6A3) ### Aufgabe 4 (optional) 1. Derzeit wird die Schrift den Größen nicht angepasst. Implementiere daher einen Skalierungsfaktor für die Größe der Schrift in Abhängigkeit zur Fenstergröße. Für den Desktop musst du ein bisschen ausprobieren um herauszufinden, welche Größen dir passen. Bei Android ist dies einfacher. Hier kannst du den eingebauten Faktor *displayDensity* verwenden. ```processing float scale; ... scale = displayDensity; normalFont = createFont("SansSerif", textWidth * scale); ``` [Github Repository Catcher](https://github.com/Flocksserver/CatcherTutorial) [Github Repository Tutorial](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level6/Processing_Tutorial_Level_%236-CatcherGameTutorial.md)
json metadata{"tags":["programming","processing","java","tutorial"],"links":["https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level0/Processing_Tutorial_Level_%230-CatcherGameTutorial.md","https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level1/Processing_Tutorial_Level_%231-CatcherGameTutorial.md","https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level2/Processing_Tutorial_Level_%232-CatcherGameTutorial.md","https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level3/Processing_Tutorial_Level_%233-CatcherGameTutorial.md","https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level4/Processing_Tutorial_Level_%234-CatcherGameTutorial.md","https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level5/Processing_Tutorial_Level_%235-CatcherGameTutorial.md","https://processing.org/tutorials/typography","https://processing.org/tutorials/text","https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level6/CatcherTutorialLevel6A1","https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level6/CatcherTutorialLevel6A2","https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level6/CatcherTutorialLevel6A3","https://github.com/Flocksserver/CatcherTutorial","https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level6/Processing_Tutorial_Level_%236-CatcherGameTutorial.md"],"app":"steemit/0.1","format":"markdown"}
parent author
parent permlinkprogramming
permlinkcatcher-game-tutorial-level-6
titleCatcher Game Tutorial Level 6
Transaction InfoBlock #18969546/Trx 35417412acc33651104391862b5d812cfeed62ef
View Raw JSON Data
{
  "block": 18969546,
  "op": [
    "comment",
    {
      "author": "flocksserver",
      "body": "# Zusammenfassung\nIn diesem Level geht es um das Darstellen von Text im Fenster. Außerdem integrieren wir verschiedene Schwierigkeitsstufen in unserem Spiel.\n\n| Thema                 | Voraussetzungen         |\n| --------------------- | ----------------------- |\n| Schwierigkeit         | ***       |\n| Hardware              | PC (Windows/Mac/Linux), Android-Smartphone (optional)  |\n| Software              | Browser, Internetzugang, Processing IDE  |\n| CatcherTutorial Level | [0](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level0/Processing_Tutorial_Level_%230-CatcherGameTutorial.md),[1](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level1/Processing_Tutorial_Level_%231-CatcherGameTutorial.md),[2](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level2/Processing_Tutorial_Level_%232-CatcherGameTutorial.md),[3](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level3/Processing_Tutorial_Level_%233-CatcherGameTutorial.md),[4](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level4/Processing_Tutorial_Level_%234-CatcherGameTutorial.md),[5](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level5/Processing_Tutorial_Level_%235-CatcherGameTutorial.md)                        |\n| Programmierung        | Aufruf von Funktionen, Variablen,  Events (mousePressed), Bedingte Anweisung und Verzweigung (if, else)), Funktionen, for-Schleife, Klassen, Objekte, Instanzen, Konstruktor|\n\n### Aufgabe 1\n1. Wir möchten auf dem Fenster den derzeitigen Score und die Anzahl der Leben sichtbar machen. Schaue dir die Tutorials über [Typography](https://processing.org/tutorials/typography) und [Strings and Drawing Text](https://processing.org/tutorials/text) an.\n2. Erstelle eine neue Klasse, die für das Darstellen der beiden Werte zuständig ist. Platziere die Werte beliebig auf dem Spielbereich (oben links und oben rechts zum Beispiel). Die Schrift und Schriftgrößen können in der Einstiegsdatei spezifiziert werden.\n\n[Mögliche Lösung](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level6/CatcherTutorialLevel6A1)\n\n### Aufgabe 2\n1. Schön wäre es, wenn sich die Schwierigkeit mit fortgeschrittenen Punkten erhöht. Dies kann zum Beispiel durch die Fallgeschwindigkeit beeinflusst werden. Implementiere verschiedene Grenzen, an denen sich die Geschwindigkeit der herunterfallenden Objekte erhöht.\n\n[Mögliche Lösung](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level6/CatcherTutorialLevel6A2)\n\n### Aufgabe 3\n1. Derzeit kann die Anzahl der Leben negativ werden. Das sollte natürlich nicht so sein! Wir führen das Konzept eines Zustands ein. Für das Spiel gibt es derzeit zwei Zustände. *Das Spiel läuft* und *Das Spiel ist verloren*. Implementiere in der Einstiegsdatei diese zwei Zustände. Solange *Das Spiel läuft* soll die draw-Methode *execute()* aufrufen. Wenn das Spiel verloren ist, nicht mehr. Ändere den Status auf *Das Spiel ist verloren*, sobald die Lebenszahl auf 0 geht.\n```processing\nfinal int stateGameRunning = 0;\nfinal int stateGameEnd = 1;\nint state = stateGameRunning;\n```\n\n[Mögliche Lösung](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level6/CatcherTutorialLevel6A3)\n\n### Aufgabe 4 (optional)\n1. Derzeit wird die Schrift den Größen nicht angepasst. Implementiere daher einen Skalierungsfaktor für die Größe der Schrift in Abhängigkeit zur Fenstergröße. Für den Desktop musst du ein bisschen ausprobieren um herauszufinden, welche Größen dir passen. Bei Android ist dies einfacher. Hier kannst du den eingebauten Faktor *displayDensity* verwenden.\n```processing\nfloat scale;\n...\nscale = displayDensity;\nnormalFont = createFont(\"SansSerif\", textWidth * scale);\n```\n\n[Github Repository Catcher](https://github.com/Flocksserver/CatcherTutorial)\n[Github Repository Tutorial](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level6/Processing_Tutorial_Level_%236-CatcherGameTutorial.md)",
      "json_metadata": "{\"tags\":[\"programming\",\"processing\",\"java\",\"tutorial\"],\"links\":[\"https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level0/Processing_Tutorial_Level_%230-CatcherGameTutorial.md\",\"https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level1/Processing_Tutorial_Level_%231-CatcherGameTutorial.md\",\"https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level2/Processing_Tutorial_Level_%232-CatcherGameTutorial.md\",\"https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level3/Processing_Tutorial_Level_%233-CatcherGameTutorial.md\",\"https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level4/Processing_Tutorial_Level_%234-CatcherGameTutorial.md\",\"https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level5/Processing_Tutorial_Level_%235-CatcherGameTutorial.md\",\"https://processing.org/tutorials/typography\",\"https://processing.org/tutorials/text\",\"https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level6/CatcherTutorialLevel6A1\",\"https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level6/CatcherTutorialLevel6A2\",\"https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level6/CatcherTutorialLevel6A3\",\"https://github.com/Flocksserver/CatcherTutorial\",\"https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level6/Processing_Tutorial_Level_%236-CatcherGameTutorial.md\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}",
      "parent_author": "",
      "parent_permlink": "programming",
      "permlink": "catcher-game-tutorial-level-6",
      "title": "Catcher Game Tutorial Level 6"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-14T11:44:00",
  "trx_id": "35417412acc33651104391862b5d812cfeed62ef",
  "trx_in_block": 35,
  "virtual_op": 0
}
2018/01/10 13:11:48
authorflocksserver
permlinkcatcher-game-tutorial-level-5
votermeglanafisha
weight10000 (100.00%)
Transaction InfoBlock #18856216/Trx 35bde00ab651feafde83616bc7e168af1ce6e27d
View Raw JSON Data
{
  "block": 18856216,
  "op": [
    "vote",
    {
      "author": "flocksserver",
      "permlink": "catcher-game-tutorial-level-5",
      "voter": "meglanafisha",
      "weight": 10000
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-10T13:11:48",
  "trx_id": "35bde00ab651feafde83616bc7e168af1ce6e27d",
  "trx_in_block": 42,
  "virtual_op": 0
}
2018/01/10 13:11:30
authorflocksserver
permlinkcatcher-game-tutorial-level-5
voterflocksserver
weight10000 (100.00%)
Transaction InfoBlock #18856210/Trx 9f2f237ff4950ce97a562dec6eac0e3a4ebc3d80
View Raw JSON Data
{
  "block": 18856210,
  "op": [
    "vote",
    {
      "author": "flocksserver",
      "permlink": "catcher-game-tutorial-level-5",
      "voter": "flocksserver",
      "weight": 10000
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-10T13:11:30",
  "trx_id": "9f2f237ff4950ce97a562dec6eac0e3a4ebc3d80",
  "trx_in_block": 53,
  "virtual_op": 0
}
2018/01/10 13:11:30
authorflocksserver
body# Zusammenfassung In diesem Level bauen wir Spielmechanik ein! Du lernst Kollisionsprüfungen hinzuzufügen und Zähler für den Spielstand und Leben. Außerdem sollen nicht nur eine endliche Anzahl an Objekten herunterfallen sondern ein dauerhafter Objektregen implementiert werden. | Thema | Voraussetzungen | | --------------------- | ----------------------- | | Schwierigkeit | **** | | Hardware | PC (Windows/Mac/Linux), Android-Smartphone (optional) | | Software | Browser, Internetzugang, Processing IDE | | CatcherTutorial Level | [0](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level0/Processing_Tutorial_Level_%230-CatcherGameTutorial.md),[1](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level1/Processing_Tutorial_Level_%231-CatcherGameTutorial.md),[2](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level2/Processing_Tutorial_Level_%232-CatcherGameTutorial.md),[3](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level3/Processing_Tutorial_Level_%233-CatcherGameTutorial.md),[4](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level4/Processing_Tutorial_Level_%234-CatcherGameTutorial.md) | | Programmierung | Aufruf von Funktionen, Variablen, Events (mousePressed), Bedingte Anweisung und Verzweigung (if, else)), Funktionen, for-Schleife, Klassen, Objekte, Instanzen, Konstruktor| ### Aufgabe 1 1. Um die Anzahl der noch übrigen Leben zu zählen, integriere eine Variable dafür. Der derzeitige Stand muss derzeit nicht im Fenster angezeigt werden. Um die Anzahl trotzdem sichtbar zu machen, kannst du dir in der Konsole den Wert der Variablen ausgeben lassen. ```processing int lives = 5; ... println("Lives: "+ lives); // Innerhalb der zyklischen Ausführung ``` 2. Überlege eine Kollisionserkennung für die herunterfallenden Objekte, sobald diese das Ende des Bildschirms erreicht habe. Beachte die Größe der Objekte. Beispiel: Bei einem PShape, der im Modus *CENTER* gezeichnet wurde, ist die unterste Kante an der Y-Position des Objektes + (Höhe des Objektes / 2)). <div> <img src="https://github.com/Flocksserver/CatcherTutorial/raw/master/tutorial/Level5/collision.png" width="600"> </div> <br> 3. Implementiere die Kollisionserkennung. Tipp: Du kannst die Y-Position des herunterfallenden Objektes aus dem PShape-Objekt extrahieren, oder die einfachere Variante: Jedesmal beim Aufruf von *translate()* kannst du eine Variable zur yPosition um denselben Wert wie translate erhöhen (achte aber darauf, dass du beim Zeichnen des Objektes nicht die nun erstellte yPos nimmst!). 4. Zähle ein Leben runter, sobald ein Objekt das Ende des Bildschirms erreicht. Entferne das entsprechenden Objekt aus der *ingame*-Liste [Mögliche Lösung](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level5/CatcherTutorialLevel5A1) ### Aufgabe 2 1. Nun möchten wir es nicht bei den 6 Objekten belassen. Als nächstes sollst du einen Dauerregen an Objekten implementieren. Lass den Stack (waitingStack) initial leer. Passe deine Implementierung so an, dass immer dann, wenn der Stack leer ist, ein neues Objekt erstellt wird, das in diesen Stack gepusht wird. [Mögliche Lösung](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level5/CatcherTutorialLevel5A2) ### Aufgabe 3 1. Yeah! Wir haben einen dauerhaften Objektregen. Leider ist dieser sehr ineffizient, da der Speicher mit sehr viel Objekten vollgeschrieben wird. > Exkurs: In Java gibt es den *garbage collector*, der Objekte, die im Speicher existieren aber nicht mehr referenziert sind automatisch entfernt. Durch dein Entfernen der Objekte aus der *ingame*-Liste hast du keinen Zugriff mehr drauf (nicht mehr referenziert). Demnach könnte sich der *garbage collector* um das Entfernen der Objekte kümmern. Bist du also fein raus? Theoretisch ja, praktisch nein! Es ist *guter Stil* effizient zu programmieren, denn der *garbage collector* ist ein Feature der JVM (Java Virtual Machine). Wenn du beispielsweise das nächste mal etwas in C++ programmierst, hilft es dir gleich mit dem scharfen Blick zur Effizienz zu programmieren. 2. Passe deine Implementierung an, sodass das Objekt bei Kollision mit dem unteren Bildschirmrand nicht nur aus der *ingame*-Liste entfernt, sondern gleich wieder dem Stack hinzugefügt wird. Hast du im herunterfallenden Objekt globale Variablen die du wieder zurücksetzen musst? Bestimmt! Erstelle eine Funktion in der Klasse, die alle relevanten Variablen wieder auf den initialen Zustand zurücksetzt. [Mögliche Lösung](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level5/CatcherTutorialLevel5A3) ### Aufgabe 4 1. Was war nochmal das Ziel des Spiels? Punkte sammeln! Endlich soll dein *Catcher* die Funktionalität bekommen, die er braucht. Erstelle wie beim Leben eine Variable für die aktuellen Punkte. 2. Jetzt wird es etwas tricky! Überlege dir eine Kollisionserkennung zwischen dem *Catcher* und deinen herunterfallenden Objekten. Vom Prinzip musst du genau wie in Aufgabe 1 vorgehen. Beachte aber, dass diesmal die X **und** die Y-Positionen vom jeweils herunterfallenden Objekt und dem *Catcher* entscheidend sind. Außerdem sind bei der Betrachtung der Y-Richtung nicht nur die untere Kante (*+ objekt.height/2*) sondern auch die obere Kante (*- objekt.height/2*) relevant. Bei der Betrachtung der X-Richtung demnach (*+ objekt.width/2*) und (*- objekt.width/2*). Probiere ruhig etwas länger aus und lass dich nicht entmutigen, wenn du nicht sofort auf eine richtig funktionierende Lösung kommst. 3. Zähle die aktuellen Punkte bei Kontakt mit dem *Catcher* hoch. Entferne das entsprechenden Objekt aus der *ingame*-List, initialisiere es neu und füge es dem Stack hinzu [Mögliche Lösung](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level5/CatcherTutorialLevel5A4) > Exkurs: Ist dir aufgefallen, dass die Kollisionserkennung nicht ganz korrekt ist wenn du wie ich für die herunterfallenden Objekte Kreise verwendest? Der Algorithmus dafür geht von einem Rechteck aus. Dies wird klar, wenn du die Berechnung der Kollision auf Papier mit den Objekten malst und den Kreis links oder rechts an die Ecke des *Catchers* treffen lässt. Haben wir nun quatsch implementiert? Wieder: Theoretisch ja, praktisch nein! In Spielen (vorrangig bei 3D - aber auch teilweise bei 2D) ist es aus Effizienzgründen gängig, dass eine [*Hitbox*](https://de.wikipedia.org/wiki/Hitbox) definiert wird. Diese Beschreibt den Bereich, in dem Kollision als gegeben angesehen wird. Der Kreis besitzt also eine virtuelle Hitbox um sich herum. ### Aufgabe 5 (optional) 1. Die Game-Klasse wird immer voller. Lagere doch Funktionalität aus! Ein Beispiel ist das Organisieren der herunterfallenden Objekte. Falls du magst kannst du auch andere spezifische Logik aus der Klasse in eine neue ziehen. [Mögliche Lösung](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level5/CatcherTutorialLevel5A5) ### Aufgabe 6 (optional) 1. Teste die Anwendung auch auf Android [Github Repository Catcher](https://github.com/Flocksserver/CatcherTutorial) [Github Repository Tutorial](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level5/Processing_Tutorial_Level_%235-CatcherGameTutorial.md)
json metadata{"tags":["programming","processing","java","tutorial"],"image":["https://github.com/Flocksserver/CatcherTutorial/raw/master/tutorial/Level5/collision.png"],"links":["https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level0/Processing_Tutorial_Level_%230-CatcherGameTutorial.md","https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level1/Processing_Tutorial_Level_%231-CatcherGameTutorial.md","https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level2/Processing_Tutorial_Level_%232-CatcherGameTutorial.md","https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level3/Processing_Tutorial_Level_%233-CatcherGameTutorial.md","https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level4/Processing_Tutorial_Level_%234-CatcherGameTutorial.md","https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level5/CatcherTutorialLevel5A1","https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level5/CatcherTutorialLevel5A2","https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level5/CatcherTutorialLevel5A3","https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level5/CatcherTutorialLevel5A4","https://de.wikipedia.org/wiki/Hitbox","https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level5/CatcherTutorialLevel5A5","https://github.com/Flocksserver/CatcherTutorial","https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level5/Processing_Tutorial_Level_%235-CatcherGameTutorial.md"],"app":"steemit/0.1","format":"markdown"}
parent author
parent permlinkprogramming
permlinkcatcher-game-tutorial-level-5
titleCatcher Game Tutorial Level 5
Transaction InfoBlock #18856210/Trx 9f2f237ff4950ce97a562dec6eac0e3a4ebc3d80
View Raw JSON Data
{
  "block": 18856210,
  "op": [
    "comment",
    {
      "author": "flocksserver",
      "body": "# Zusammenfassung\nIn diesem Level bauen wir Spielmechanik ein! Du lernst Kollisionsprüfungen hinzuzufügen und Zähler für den Spielstand und Leben. Außerdem sollen nicht nur eine endliche Anzahl an Objekten herunterfallen sondern ein dauerhafter Objektregen implementiert werden.\n\n| Thema                 | Voraussetzungen         |\n| --------------------- | ----------------------- |\n| Schwierigkeit         | ****         |\n| Hardware              | PC (Windows/Mac/Linux), Android-Smartphone (optional)  |\n| Software              | Browser, Internetzugang, Processing IDE  |\n| CatcherTutorial Level | [0](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level0/Processing_Tutorial_Level_%230-CatcherGameTutorial.md),[1](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level1/Processing_Tutorial_Level_%231-CatcherGameTutorial.md),[2](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level2/Processing_Tutorial_Level_%232-CatcherGameTutorial.md),[3](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level3/Processing_Tutorial_Level_%233-CatcherGameTutorial.md),[4](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level4/Processing_Tutorial_Level_%234-CatcherGameTutorial.md)                       |\n| Programmierung        | Aufruf von Funktionen, Variablen,  Events (mousePressed), Bedingte Anweisung und Verzweigung (if, else)), Funktionen, for-Schleife, Klassen, Objekte, Instanzen, Konstruktor|\n\n### Aufgabe 1\n1. Um die Anzahl der noch übrigen Leben zu zählen, integriere eine Variable dafür. Der derzeitige Stand muss derzeit nicht im Fenster angezeigt werden. Um die Anzahl trotzdem sichtbar zu machen, kannst du dir in der Konsole den Wert der Variablen ausgeben lassen.\n```processing\nint lives = 5;\n...\nprintln(\"Lives: \"+ lives); // Innerhalb der zyklischen Ausführung\n```\n2. Überlege eine Kollisionserkennung für die herunterfallenden Objekte, sobald diese das Ende des Bildschirms erreicht habe. Beachte die Größe der Objekte. Beispiel: Bei einem PShape, der im Modus *CENTER* gezeichnet wurde, ist die unterste Kante an der Y-Position des Objektes + (Höhe des Objektes / 2)).\n<div>\n<img src=\"https://github.com/Flocksserver/CatcherTutorial/raw/master/tutorial/Level5/collision.png\" width=\"600\">\n</div>\n<br>\n\n3. Implementiere die Kollisionserkennung. Tipp: Du kannst die Y-Position des herunterfallenden Objektes aus dem PShape-Objekt extrahieren, oder die einfachere Variante: Jedesmal beim Aufruf von *translate()* kannst du eine Variable zur yPosition um denselben Wert wie translate erhöhen (achte aber darauf, dass du beim Zeichnen des Objektes nicht die nun erstellte yPos nimmst!).\n4. Zähle ein Leben runter, sobald ein Objekt das Ende des Bildschirms erreicht. Entferne das entsprechenden Objekt aus der *ingame*-Liste\n\n[Mögliche Lösung](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level5/CatcherTutorialLevel5A1)\n\n### Aufgabe 2\n1. Nun möchten wir es nicht bei den 6 Objekten belassen. Als nächstes sollst du einen Dauerregen an Objekten implementieren. Lass den Stack (waitingStack) initial leer. Passe deine Implementierung so an, dass immer dann, wenn der Stack leer ist, ein neues Objekt erstellt wird, das in diesen Stack gepusht wird.\n\n[Mögliche Lösung](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level5/CatcherTutorialLevel5A2)\n\n### Aufgabe 3\n1. Yeah! Wir haben einen dauerhaften Objektregen. Leider ist dieser sehr ineffizient, da der Speicher mit sehr viel Objekten vollgeschrieben wird.\n> Exkurs: In Java gibt es den *garbage collector*, der Objekte, die im Speicher existieren aber nicht mehr referenziert sind automatisch entfernt. Durch dein Entfernen der Objekte aus der *ingame*-Liste hast du keinen Zugriff mehr drauf (nicht mehr referenziert). Demnach könnte sich der *garbage collector* um das Entfernen der Objekte kümmern. Bist du also fein raus? Theoretisch ja, praktisch nein! Es ist *guter Stil* effizient zu programmieren, denn der *garbage collector* ist ein Feature der JVM (Java Virtual Machine). Wenn du beispielsweise das nächste mal etwas in C++ programmierst, hilft es dir gleich mit dem scharfen Blick zur Effizienz zu programmieren.\n\n2. Passe deine Implementierung an, sodass das Objekt bei Kollision mit dem unteren Bildschirmrand nicht nur aus der *ingame*-Liste entfernt, sondern gleich wieder dem Stack hinzugefügt wird. Hast du im herunterfallenden Objekt globale Variablen die du wieder zurücksetzen musst? Bestimmt! Erstelle eine Funktion in der Klasse, die alle relevanten Variablen wieder auf den initialen Zustand zurücksetzt.\n\n[Mögliche Lösung](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level5/CatcherTutorialLevel5A3)\n\n### Aufgabe 4\n1. Was war nochmal das Ziel des Spiels? Punkte sammeln! Endlich soll dein *Catcher* die Funktionalität bekommen, die er braucht. Erstelle wie beim Leben eine Variable für die aktuellen Punkte.\n2. Jetzt wird es etwas tricky! Überlege dir eine Kollisionserkennung zwischen dem *Catcher* und deinen herunterfallenden Objekten. Vom Prinzip musst du genau wie in Aufgabe 1 vorgehen. Beachte aber, dass diesmal die X **und** die Y-Positionen vom jeweils herunterfallenden Objekt und dem *Catcher* entscheidend sind. Außerdem sind bei der Betrachtung der Y-Richtung nicht nur die untere Kante (*+ objekt.height/2*) sondern auch die obere Kante (*- objekt.height/2*) relevant. Bei der Betrachtung der X-Richtung demnach (*+ objekt.width/2*) und (*- objekt.width/2*). Probiere ruhig etwas länger aus und lass dich nicht entmutigen, wenn du nicht sofort auf eine richtig funktionierende Lösung kommst.\n3. Zähle die aktuellen Punkte bei Kontakt mit dem *Catcher* hoch. Entferne das entsprechenden Objekt aus der *ingame*-List, initialisiere es neu und füge es dem Stack hinzu\n\n[Mögliche Lösung](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level5/CatcherTutorialLevel5A4)\n\n> Exkurs: Ist dir aufgefallen, dass die Kollisionserkennung nicht ganz korrekt ist wenn du wie ich für die herunterfallenden Objekte Kreise verwendest? Der Algorithmus dafür geht von einem Rechteck aus. Dies wird klar, wenn du die Berechnung der Kollision auf Papier mit den Objekten malst und den Kreis links oder rechts an die Ecke des *Catchers* treffen lässt. Haben wir nun quatsch implementiert? Wieder: Theoretisch ja, praktisch nein! In Spielen (vorrangig bei 3D - aber auch teilweise bei 2D) ist es aus Effizienzgründen gängig, dass eine [*Hitbox*](https://de.wikipedia.org/wiki/Hitbox) definiert wird. Diese Beschreibt den Bereich, in dem Kollision als gegeben angesehen wird. Der Kreis besitzt also eine virtuelle Hitbox um sich herum.\n\n### Aufgabe 5 (optional)\n1. Die Game-Klasse wird immer voller. Lagere doch Funktionalität aus! Ein Beispiel ist das Organisieren der herunterfallenden Objekte. Falls du magst kannst du auch andere spezifische Logik aus der Klasse in eine neue ziehen.\n\n[Mögliche Lösung](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level5/CatcherTutorialLevel5A5)\n\n### Aufgabe 6 (optional)\n1. Teste die Anwendung auch auf Android\n\n[Github Repository Catcher](https://github.com/Flocksserver/CatcherTutorial)\n[Github Repository Tutorial](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level5/Processing_Tutorial_Level_%235-CatcherGameTutorial.md)",
      "json_metadata": "{\"tags\":[\"programming\",\"processing\",\"java\",\"tutorial\"],\"image\":[\"https://github.com/Flocksserver/CatcherTutorial/raw/master/tutorial/Level5/collision.png\"],\"links\":[\"https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level0/Processing_Tutorial_Level_%230-CatcherGameTutorial.md\",\"https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level1/Processing_Tutorial_Level_%231-CatcherGameTutorial.md\",\"https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level2/Processing_Tutorial_Level_%232-CatcherGameTutorial.md\",\"https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level3/Processing_Tutorial_Level_%233-CatcherGameTutorial.md\",\"https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level4/Processing_Tutorial_Level_%234-CatcherGameTutorial.md\",\"https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level5/CatcherTutorialLevel5A1\",\"https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level5/CatcherTutorialLevel5A2\",\"https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level5/CatcherTutorialLevel5A3\",\"https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level5/CatcherTutorialLevel5A4\",\"https://de.wikipedia.org/wiki/Hitbox\",\"https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level5/CatcherTutorialLevel5A5\",\"https://github.com/Flocksserver/CatcherTutorial\",\"https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level5/Processing_Tutorial_Level_%235-CatcherGameTutorial.md\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}",
      "parent_author": "",
      "parent_permlink": "programming",
      "permlink": "catcher-game-tutorial-level-5",
      "title": "Catcher Game Tutorial Level 5"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-10T13:11:30",
  "trx_id": "9f2f237ff4950ce97a562dec6eac0e3a4ebc3d80",
  "trx_in_block": 53,
  "virtual_op": 0
}
2018/01/10 13:03:57
authorflocksserver
permlinkcatcher-game-tutorial-level-4
voterflocksserver
weight10000 (100.00%)
Transaction InfoBlock #18856059/Trx 18e0810c26beef0729c0b2f82948aa4fecebdbec
View Raw JSON Data
{
  "block": 18856059,
  "op": [
    "vote",
    {
      "author": "flocksserver",
      "permlink": "catcher-game-tutorial-level-4",
      "voter": "flocksserver",
      "weight": 10000
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-10T13:03:57",
  "trx_id": "18e0810c26beef0729c0b2f82948aa4fecebdbec",
  "trx_in_block": 17,
  "virtual_op": 0
}
2018/01/10 13:03:57
authorflocksserver
body# Zusammenfassung In diesem Level geht es um das Anpassen von Größen in Abhängikeit der Displaygröße. Außerdem testen wir die Anwendung das erste mal auf einem Android-Smartphone (optional). | Thema | Voraussetzungen | | --------------------- | ----------------------- | | Schwierigkeit | ** | | Hardware | PC (Windows/Mac/Linux), Android-Smartphone (optional) | | Software | Browser, Internetzugang, Processing IDE | | CatcherTutorial Level | [0](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level0/Processing_Tutorial_Level_%230-CatcherGameTutorial.md),[1](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level1/Processing_Tutorial_Level_%231-CatcherGameTutorial.md),[2](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level2/Processing_Tutorial_Level_%232-CatcherGameTutorial.md),[3](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level3/Processing_Tutorial_Level_%233-CatcherGameTutorial.md) | | Programmierung | Aufruf von Funktionen, Variablen, Events (mousePressed), Bedingte Anweisung und Verzweigung (if, else)), Funktionen, for-Schleife, Klassen, Objekte, Instanzen, Konstruktor| ### Aufgabe 1 1. Das Spiel soll auf nicht nur in den Maßen 400x640 dargestellt werden können. Das wird spätestens auf Android-Smartphones mit verschiedenen Bildschirmgrößen relevant. Aber auch auf dem Desktop ist ein Spiel im *Vollbildmodus* interessant. Aktiviere den Vollbildmodus und führe die Anwendung aus. ```processing //size(400, 640); fullScreen(P2D); //P2D ist ein alternativer Renderer in Processing ``` 2. Was fällt dir auf? Baue deine Anwendung mit Hilfe der Processing Variablen (**width** und **height**) so um, dass alle Objekte im Verhältnis zu den Displaymaßen berechnet werden. ```processing // Beispiel Mitte des Bildschirms x/y float displayMidX = width/2; float displayMidY = height/2; ``` [Mögliche Lösung](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level4/CatcherTutorialLevel4A1) ### Aufgabe 2 (optional) 1. Aktiviere die [Entwickleroptionen](https://www.droidwiki.org/wiki/Entwickleroptionen) auf den Android-Smartphone 2. Aktiviere USB-Debugging in den Entwickleroptionen des Smartphones 3. Wechsel den Modus in der Processing IDE zu Android 4. a) Schließe das Smartphone per USB am PC an. Sollte auf dem Smartphone eine Erlaubnis des Rechners zum Verbinden verlangt werden, so bestätige diese. Drücke den Play-Button. Die Anwendung sollte auf deinem Smartphone installiert und gestartet werden. 4. b) Über den Menüpunkt *Sketch* in der Processing IDE kannst du *Run in Emulator* wählen. Dann benötigst du kein Smartphone. Ich würde dir aber immer empfehlen ein echtes Gerät zum Testen zu verwenden. Aber falls du einen Emulator verwenden willst/musst verwende x86, wenn Processing dich danach fragt. [Github Repository Catcher](https://github.com/Flocksserver/CatcherTutorial) [Github Repository Tutorial](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level4/Processing_Tutorial_Level_%234-CatcherGameTutorial.md)
json metadata{"tags":["programming","processing","java","tutorial"],"links":["https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level0/Processing_Tutorial_Level_%230-CatcherGameTutorial.md","https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level1/Processing_Tutorial_Level_%231-CatcherGameTutorial.md","https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level2/Processing_Tutorial_Level_%232-CatcherGameTutorial.md","https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level3/Processing_Tutorial_Level_%233-CatcherGameTutorial.md","https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level4/CatcherTutorialLevel4A1","https://www.droidwiki.org/wiki/Entwickleroptionen","https://github.com/Flocksserver/CatcherTutorial","https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level4/Processing_Tutorial_Level_%234-CatcherGameTutorial.md"],"app":"steemit/0.1","format":"markdown"}
parent author
parent permlinkprogramming
permlinkcatcher-game-tutorial-level-4
titleCatcher Game Tutorial Level 4
Transaction InfoBlock #18856059/Trx 18e0810c26beef0729c0b2f82948aa4fecebdbec
View Raw JSON Data
{
  "block": 18856059,
  "op": [
    "comment",
    {
      "author": "flocksserver",
      "body": "# Zusammenfassung\nIn diesem Level geht es um das Anpassen von Größen in Abhängikeit der Displaygröße. Außerdem testen wir die Anwendung das erste mal auf einem Android-Smartphone (optional).\n\n| Thema                 | Voraussetzungen         |\n| --------------------- | ----------------------- |\n| Schwierigkeit         | **         |\n| Hardware              | PC (Windows/Mac/Linux), Android-Smartphone (optional)  |\n| Software              | Browser, Internetzugang, Processing IDE        |\n| CatcherTutorial Level | [0](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level0/Processing_Tutorial_Level_%230-CatcherGameTutorial.md),[1](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level1/Processing_Tutorial_Level_%231-CatcherGameTutorial.md),[2](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level2/Processing_Tutorial_Level_%232-CatcherGameTutorial.md),[3](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level3/Processing_Tutorial_Level_%233-CatcherGameTutorial.md)                        |\n| Programmierung        | Aufruf von Funktionen, Variablen,  Events (mousePressed), Bedingte Anweisung und Verzweigung (if, else)), Funktionen, for-Schleife, Klassen, Objekte, Instanzen, Konstruktor|\n\n### Aufgabe 1\n1. Das Spiel soll auf nicht nur in den Maßen 400x640 dargestellt werden können. Das wird spätestens auf Android-Smartphones mit verschiedenen Bildschirmgrößen relevant. Aber auch auf dem Desktop ist ein Spiel im *Vollbildmodus* interessant. Aktiviere den Vollbildmodus und führe die Anwendung aus.\n```processing\n//size(400, 640);\nfullScreen(P2D); //P2D ist ein alternativer Renderer in Processing\n```\n2. Was fällt dir auf? Baue deine Anwendung mit Hilfe der Processing Variablen (**width** und **height**) so um, dass alle Objekte im Verhältnis zu den Displaymaßen berechnet werden.\n```processing\n// Beispiel Mitte des Bildschirms x/y\nfloat displayMidX = width/2;\nfloat displayMidY = height/2;\n```\n[Mögliche Lösung](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level4/CatcherTutorialLevel4A1)\n\n### Aufgabe 2 (optional)\n1. Aktiviere die [Entwickleroptionen](https://www.droidwiki.org/wiki/Entwickleroptionen) auf den Android-Smartphone\n2. Aktiviere USB-Debugging in den Entwickleroptionen des Smartphones\n3. Wechsel den Modus in der Processing IDE zu Android\n4. a) Schließe das Smartphone per USB am PC an. Sollte auf dem Smartphone eine Erlaubnis des Rechners zum Verbinden verlangt werden, so bestätige diese. Drücke den Play-Button. Die Anwendung sollte auf deinem Smartphone installiert und gestartet werden.\n4. b) Über den Menüpunkt *Sketch* in der Processing IDE kannst du *Run in Emulator* wählen. Dann benötigst du kein Smartphone. Ich würde dir aber immer empfehlen ein echtes Gerät zum Testen zu verwenden. Aber falls du einen Emulator verwenden willst/musst verwende x86, wenn Processing dich danach fragt.\n\n[Github Repository Catcher](https://github.com/Flocksserver/CatcherTutorial)\n[Github Repository Tutorial](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level4/Processing_Tutorial_Level_%234-CatcherGameTutorial.md)",
      "json_metadata": "{\"tags\":[\"programming\",\"processing\",\"java\",\"tutorial\"],\"links\":[\"https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level0/Processing_Tutorial_Level_%230-CatcherGameTutorial.md\",\"https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level1/Processing_Tutorial_Level_%231-CatcherGameTutorial.md\",\"https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level2/Processing_Tutorial_Level_%232-CatcherGameTutorial.md\",\"https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level3/Processing_Tutorial_Level_%233-CatcherGameTutorial.md\",\"https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level4/CatcherTutorialLevel4A1\",\"https://www.droidwiki.org/wiki/Entwickleroptionen\",\"https://github.com/Flocksserver/CatcherTutorial\",\"https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level4/Processing_Tutorial_Level_%234-CatcherGameTutorial.md\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}",
      "parent_author": "",
      "parent_permlink": "programming",
      "permlink": "catcher-game-tutorial-level-4",
      "title": "Catcher Game Tutorial Level 4"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-10T13:03:57",
  "trx_id": "18e0810c26beef0729c0b2f82948aa4fecebdbec",
  "trx_in_block": 17,
  "virtual_op": 0
}
2018/01/09 15:44:09
authorflocksserver
permlinkcatcher-game-tutorial-level-3
voterubg
weight100 (1.00%)
Transaction InfoBlock #18830473/Trx 28ebc70183ad4689d1d3d304b65beb9344e5197e
View Raw JSON Data
{
  "block": 18830473,
  "op": [
    "vote",
    {
      "author": "flocksserver",
      "permlink": "catcher-game-tutorial-level-3",
      "voter": "ubg",
      "weight": 100
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-09T15:44:09",
  "trx_id": "28ebc70183ad4689d1d3d304b65beb9344e5197e",
  "trx_in_block": 36,
  "virtual_op": 0
}
2018/01/09 15:27:30
authorflocksserver
bodyDanke für das Feedback! Mifare DESFire EV1 (im übrigen auch schon die Mifare Ultralight) implementieren eine Verschlüsselung, für die kein bekannter Angriffsvektor bekannt ist, um die Passwörter darauf zu knacken.
json metadata{"tags":["nfc"],"app":"steemit/0.1"}
parent authortechnature
parent permlinkre-flocksserver-nfc-mifare-1k-4k-hacking-20180109t101809006z
permlinkre-technature-re-flocksserver-nfc-mifare-1k-4k-hacking-20180109t152731773z
title
Transaction InfoBlock #18830140/Trx 5748b5daa0418670e3d0ca336731c4fbe59b1de0
View Raw JSON Data
{
  "block": 18830140,
  "op": [
    "comment",
    {
      "author": "flocksserver",
      "body": "Danke für das Feedback! Mifare DESFire EV1 (im übrigen auch schon die Mifare Ultralight) implementieren eine Verschlüsselung, für die kein bekannter Angriffsvektor bekannt ist, um die Passwörter darauf zu knacken.",
      "json_metadata": "{\"tags\":[\"nfc\"],\"app\":\"steemit/0.1\"}",
      "parent_author": "technature",
      "parent_permlink": "re-flocksserver-nfc-mifare-1k-4k-hacking-20180109t101809006z",
      "permlink": "re-technature-re-flocksserver-nfc-mifare-1k-4k-hacking-20180109t152731773z",
      "title": ""
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-09T15:27:30",
  "trx_id": "5748b5daa0418670e3d0ca336731c4fbe59b1de0",
  "trx_in_block": 43,
  "virtual_op": 0
}
2018/01/09 15:18:12
authorflocksserver
body@@ -4304,33 +4304,33 @@ r/tutorial/Level -1 +2 /Processing_Tuto @@ -4335,33 +4335,33 @@ torial_Level_%2523 -1 +2 -CatcherGameTuto
json metadata{"tags":["programming","processing","java","tutorial"],"links":["https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level0/Processing_Tutorial_Level_%230-CatcherGameTutorial.md","https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level1/Processing_Tutorial_Level_%231-CatcherGameTutorial.md","https://processing.org/","https://processing.org/reference/translate_.html","https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level2/CatcherTutorialLevel2A1/CatcherTutorialLevel2A1.pde","https://processing.org/reference/ArrayList.html","https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level2/CatcherTutorialLevel2A2/CatcherTutorialLevel2A2.pde","https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level2/CatcherTutorialLevel2A3/CatcherTutorialLevel2A3.pde","https://github.com/Flocksserver/CatcherTutorial","https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level2/Processing_Tutorial_Level_%232-CatcherGameTutorial.md"],"app":"steemit/0.1","format":"markdown"}
parent author
parent permlinkprogramming
permlinkcatcher-game-tutorial-level-2
titleCatcher Game Tutorial Level 2
Transaction InfoBlock #18829954/Trx b80e73a7ae2a55f50b83091d91749e7555d90022
View Raw JSON Data
{
  "block": 18829954,
  "op": [
    "comment",
    {
      "author": "flocksserver",
      "body": "@@ -4304,33 +4304,33 @@\n r/tutorial/Level\n-1\n+2\n /Processing_Tuto\n@@ -4335,33 +4335,33 @@\n torial_Level_%2523\n-1\n+2\n -CatcherGameTuto\n",
      "json_metadata": "{\"tags\":[\"programming\",\"processing\",\"java\",\"tutorial\"],\"links\":[\"https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level0/Processing_Tutorial_Level_%230-CatcherGameTutorial.md\",\"https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level1/Processing_Tutorial_Level_%231-CatcherGameTutorial.md\",\"https://processing.org/\",\"https://processing.org/reference/translate_.html\",\"https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level2/CatcherTutorialLevel2A1/CatcherTutorialLevel2A1.pde\",\"https://processing.org/reference/ArrayList.html\",\"https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level2/CatcherTutorialLevel2A2/CatcherTutorialLevel2A2.pde\",\"https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level2/CatcherTutorialLevel2A3/CatcherTutorialLevel2A3.pde\",\"https://github.com/Flocksserver/CatcherTutorial\",\"https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level2/Processing_Tutorial_Level_%232-CatcherGameTutorial.md\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}",
      "parent_author": "",
      "parent_permlink": "programming",
      "permlink": "catcher-game-tutorial-level-2",
      "title": "Catcher Game Tutorial Level 2"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-09T15:18:12",
  "trx_id": "b80e73a7ae2a55f50b83091d91749e7555d90022",
  "trx_in_block": 15,
  "virtual_op": 0
}
2018/01/09 15:18:00
authorflocksserver
permlinkcatcher-game-tutorial-level-3
voterflocksserver
weight10000 (100.00%)
Transaction InfoBlock #18829950/Trx d77dbeb7c5f1d5c9f64492acc2b14230a320b0b1
View Raw JSON Data
{
  "block": 18829950,
  "op": [
    "vote",
    {
      "author": "flocksserver",
      "permlink": "catcher-game-tutorial-level-3",
      "voter": "flocksserver",
      "weight": 10000
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-09T15:18:00",
  "trx_id": "d77dbeb7c5f1d5c9f64492acc2b14230a320b0b1",
  "trx_in_block": 44,
  "virtual_op": 0
}
2018/01/09 15:18:00
authorflocksserver
body# Zusammenfassung In diesem Level lernst du, wie man Klassen aus Bibliotheken einbinden und eigene Klassen erstellst. Du lernst was Instanzen von Klassen sind und wir strukturieren die Anwendung etwas um. | Thema | Voraussetzungen | | --------------------- | ----------------------- | | Schwierigkeit | *** | | Hardware | PC (Windows/Mac/Linux) | | Software | Browser, Internetzugang, Processing IDE | | CatcherTutorial Level | [0](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level0/Processing_Tutorial_Level_%230-CatcherGameTutorial.md),[1](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level1/Processing_Tutorial_Level_%231-CatcherGameTutorial.md),[2](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level2/Processing_Tutorial_Level_%232-CatcherGameTutorial.md) | | Programmierung | Aufruf von Funktionen, Variablen, Events (mousePressed), Bedingte Anweisung und Verzweigung (if, else)), Funktionen, for-Schleife| ## Programmierung Bisher hast du nur Klassen aus der Processing Bibliothek verwendet. Bevor wir uns eine Erweiterung anschauen... Was sind eigentlich Klassen? Klassen sind Bauanleitungen für Objekte. Objekte wiederum sind konkrete Instanzen (lebendige Kopien der Klasse) im Arbeitsspeicher deines Computers. Auf ihnen kannst du Funktionen aufrufen und du kannst sie in dem Fenster anzeigen lassen. Immer wenn du ein Objekt erzeugst geschieht dies auf Grundlage einer Klasse. <div> <img src="https://github.com/Flocksserver/CatcherTutorial/raw/master/tutorial/Level3/classobject.png" width="400"> </div> <br> Das kann zum einen implizit geschehen. Beispielsweise beim Aufruf von: *createShape(ELLIPSE, 0, 0, 10, 10);* Dies ist eine Funktion, die ein *PShape* Objekt [erstellt und zurück gibt](http://processing.github.io/processing-javadocs/core/processing/core/PApplet.html#createShape--). Zum anderen kannst du Objekte explizit durch das **new**-Schlüsselwort erzeugen. Beispielsweise beim Erzeugen einer neuen Liste. ```processing PShape shape = createShape(ELLIPSE, 0, 0, 10, 10); ArrayList<Float> list = new ArrayList<Float>(); ``` Da Processing auf der Programmiersprache Java basiert, kannst du auch Klassen aus der Standard Java Bibliothek verwenden, um Objekte zu erzeugen. Hierfür musst du die konkrete Klasse importieren. Import Befehle müssen immer ganz am Anfang deiner Datei stehen. ```processing import java.util.Stack; ``` Neben der Möglichkeit bereits bestehende Klassen zu verwenden, kannst du auch eigene Klassen erstellen. Diese sollten am besten in eine separaten Datei ausgelagert werden. In der Klasse können Variablen und Funktionen wie bereits gelernt verwendet werden. ```processing class Catcher { int a = 4; void doSomeWork(){ } } ``` Solch eine Klasse kannst du instanziieren (also ein Objekt davon erzeugen) und dann auf die Attribute (Variablen) und Funktionen zugreifen. ```processing Catcher catcher = new Catcher(); void draw(){ int b = catcher.a; // b wird auf 4 gesetzt catcher.doSomeWork(); // Aufruf der Catcher Methode doSomeWork() } ``` Klassen besitzen wie Processing eine Möglichkeit bestimmten Programmcode nur einmal beim ersten Erstellen auszuführen. Diese Möglichkeit heißt Konstruktor. Das ist mit der setup-Methode vergleichbar. ```processing class Catcher { int a = 4; public Catcher(){ // Wird einmalig beim Instanziieren ausgeführt } void doSomeWork(){ } } ``` ### Aufgabe 1 1. Informiere dich was ein Stack ist und wie der Java Stack aus [java.util.Stack](https://docs.oracle.com/javase/7/docs/api/java/util/Stack.html) funktioniert. 2. Baue deine Anwendung wie folgt um: Du hast einen Stack mit allen Objekten, die zukünftig herunterfallen sollen. Du hast eine Liste, in der alle Objekte sind, die im Fallen sind und angezeigt werden. [Mögliche Lösung](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level3/CatcherTutorialLevel3A1/CatcherTutorialLevel3A1.pde) ### Aufgabe 2 1. Erstelle eine neue Klasse für deine herunterfallenden Objekte. Hierzu gehst du auf den Pfeil neben dem Tab in der Processing IDE. Dann wählst du *Neuer Tab* und vergibst der Datei einen Namen (optimal ist der selbe Name wie die Klasse heißen soll). <div> <img src="https://github.com/Flocksserver/CatcherTutorial/raw/master/tutorial/Level3/newTab.png" width="400"> </div> <br> 2. Füge alle für diese Klasse Funktionen und Attribute zu. Dadurch kannst du Funktionalität kapseln. Die Einstiegsdatei wird dadurch schlanker und übersichtlicher. Derzeit muss sie nur noch die Objekte instanziieren, die Liste/den Stack verwalten und eine Methode auf den Objekten zum darstellen aufrufen. [Mögliche Lösung](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level3/CatcherTutorialLevel3A2/) ### Aufgabe 3 1. Um die Einstiegsdatei noch übersichtlicher zu gestalten wiederhole die Aufgabe 2 mit dem *Catcher*. Hierzu bietet es sich an innerhalb der Catcher-Klasse auch die PShape-Klasse zu nutzen. 2. Wir programmieren ein Spiel. Da ist es angebracht, spiel-spezifische Logik in einer entsprechenden Klasse zu organisieren. Somit reduzieren wir die Einstiegsdatei noch weiter. Erstelle eine *Game*-Klasse und verschiebe die restliche Logik aus der Einstiegsdatei. Nun sollte die Einstiegsdatei neben dem Instanziieren der Game-Klasse und ein startender Methode-Aufruf auf dessen Objekt nur noch für das Aufnehmen des *mousePressed*-Events zuständig sein. ```processing float playerPosX; Game game; void setup() { size(400, 640); game = new Game(); } void draw() { background(50); if (mousePressed) { playerPosX = mouseX; } game.execute(); } ``` [Mögliche Lösung](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level3/CatcherTutorialLevel3A3/) [Github Repository Catcher](https://github.com/Flocksserver/CatcherTutorial) [Github Repository Tutorial](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level3/Processing_Tutorial_Level_%233-CatcherGameTutorial.md)
json metadata{"tags":["programming","processing","java","tutorial"],"image":["https://github.com/Flocksserver/CatcherTutorial/raw/master/tutorial/Level3/classobject.png","https://github.com/Flocksserver/CatcherTutorial/raw/master/tutorial/Level3/newTab.png"],"links":["https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level0/Processing_Tutorial_Level_%230-CatcherGameTutorial.md","https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level1/Processing_Tutorial_Level_%231-CatcherGameTutorial.md","https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level2/Processing_Tutorial_Level_%232-CatcherGameTutorial.md","http://processing.github.io/processing-javadocs/core/processing/core/PApplet.html#createShape--","https://docs.oracle.com/javase/7/docs/api/java/util/Stack.html","https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level3/CatcherTutorialLevel3A1/CatcherTutorialLevel3A1.pde","https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level3/CatcherTutorialLevel3A2/","https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level3/CatcherTutorialLevel3A3/","https://github.com/Flocksserver/CatcherTutorial","https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level3/Processing_Tutorial_Level_%233-CatcherGameTutorial.md"],"app":"steemit/0.1","format":"markdown"}
parent author
parent permlinkprogramming
permlinkcatcher-game-tutorial-level-3
titleCatcher Game Tutorial Level 3
Transaction InfoBlock #18829950/Trx d77dbeb7c5f1d5c9f64492acc2b14230a320b0b1
View Raw JSON Data
{
  "block": 18829950,
  "op": [
    "comment",
    {
      "author": "flocksserver",
      "body": "# Zusammenfassung\nIn diesem Level lernst du, wie man Klassen aus Bibliotheken einbinden und eigene Klassen erstellst. Du lernst was Instanzen von Klassen sind und wir strukturieren die Anwendung etwas um.\n\n| Thema                 | Voraussetzungen         |\n| --------------------- | ----------------------- |\n| Schwierigkeit         | ***    |\n| Hardware              | PC (Windows/Mac/Linux)  |\n| Software              | Browser, Internetzugang, Processing IDE        |\n| CatcherTutorial Level | [0](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level0/Processing_Tutorial_Level_%230-CatcherGameTutorial.md),[1](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level1/Processing_Tutorial_Level_%231-CatcherGameTutorial.md),[2](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level2/Processing_Tutorial_Level_%232-CatcherGameTutorial.md)                        |\n| Programmierung        | Aufruf von Funktionen, Variablen,  Events (mousePressed), Bedingte Anweisung und Verzweigung (if, else)), Funktionen, for-Schleife|\n\n## Programmierung\nBisher hast du nur Klassen aus der Processing Bibliothek verwendet. Bevor wir uns eine Erweiterung anschauen... Was sind eigentlich Klassen? Klassen sind Bauanleitungen für Objekte. Objekte wiederum sind konkrete Instanzen (lebendige Kopien der Klasse) im Arbeitsspeicher deines Computers. Auf ihnen kannst du Funktionen aufrufen und du kannst sie in dem Fenster anzeigen lassen. Immer wenn du ein Objekt erzeugst geschieht dies auf Grundlage einer Klasse.\n<div>\n<img src=\"https://github.com/Flocksserver/CatcherTutorial/raw/master/tutorial/Level3/classobject.png\" width=\"400\">\n</div>\n<br>\n\nDas kann zum einen implizit geschehen. Beispielsweise beim Aufruf von: *createShape(ELLIPSE, 0, 0, 10, 10);* Dies ist eine Funktion, die ein *PShape* Objekt [erstellt und zurück gibt](http://processing.github.io/processing-javadocs/core/processing/core/PApplet.html#createShape--). Zum anderen kannst du Objekte explizit durch das **new**-Schlüsselwort erzeugen. Beispielsweise beim Erzeugen einer neuen Liste.\n```processing\nPShape shape = createShape(ELLIPSE, 0, 0, 10, 10);\nArrayList<Float> list = new ArrayList<Float>();\n```\nDa Processing auf der Programmiersprache Java basiert, kannst du auch Klassen aus der Standard Java Bibliothek verwenden, um Objekte zu erzeugen. Hierfür musst du die konkrete Klasse importieren. Import Befehle müssen immer ganz am Anfang deiner Datei stehen.\n```processing\nimport java.util.Stack;\n```\nNeben der Möglichkeit bereits bestehende Klassen zu verwenden, kannst du auch eigene Klassen erstellen. Diese sollten am besten in eine separaten Datei ausgelagert werden. In der Klasse können Variablen und Funktionen wie bereits gelernt verwendet werden.\n```processing\nclass Catcher {\n  int a = 4;\n  void doSomeWork(){\n\n  }\n}\n```\nSolch eine Klasse kannst du instanziieren (also ein Objekt davon erzeugen) und dann auf die Attribute (Variablen) und Funktionen zugreifen.\n```processing\nCatcher catcher = new Catcher();\nvoid draw(){\n  int b = catcher.a; // b wird auf 4 gesetzt\n  catcher.doSomeWork(); // Aufruf der Catcher Methode doSomeWork()\n}\n```\nKlassen besitzen wie Processing eine Möglichkeit bestimmten Programmcode nur einmal beim ersten Erstellen auszuführen. Diese Möglichkeit heißt Konstruktor. Das ist mit der setup-Methode vergleichbar.\n```processing\nclass Catcher {\n  int a = 4;\n  public Catcher(){ // Wird einmalig beim Instanziieren ausgeführt\n\n  }\n  void doSomeWork(){\n  }\n}\n```\n### Aufgabe 1\n1. Informiere dich was ein Stack ist und wie der Java Stack aus [java.util.Stack](https://docs.oracle.com/javase/7/docs/api/java/util/Stack.html) funktioniert.\n2. Baue deine Anwendung wie folgt um: Du hast einen Stack mit allen Objekten, die zukünftig herunterfallen sollen. Du hast eine Liste, in der alle Objekte sind, die im Fallen sind und angezeigt werden.\n\n[Mögliche Lösung](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level3/CatcherTutorialLevel3A1/CatcherTutorialLevel3A1.pde)\n\n### Aufgabe 2\n1. Erstelle eine neue Klasse für deine herunterfallenden Objekte. Hierzu gehst du auf den Pfeil neben dem Tab in der Processing IDE. Dann wählst du *Neuer Tab* und vergibst der Datei einen Namen (optimal ist der selbe Name wie die Klasse heißen soll).\n<div>\n<img src=\"https://github.com/Flocksserver/CatcherTutorial/raw/master/tutorial/Level3/newTab.png\" width=\"400\">\n</div>\n<br>\n\n2. Füge alle für diese Klasse Funktionen und Attribute zu. Dadurch kannst du Funktionalität kapseln. Die Einstiegsdatei wird dadurch schlanker und übersichtlicher. Derzeit muss sie nur noch die Objekte instanziieren, die Liste/den Stack verwalten und eine Methode auf den Objekten zum darstellen aufrufen.\n\n[Mögliche Lösung](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level3/CatcherTutorialLevel3A2/)\n\n### Aufgabe 3\n1. Um die Einstiegsdatei noch übersichtlicher zu gestalten wiederhole die Aufgabe 2 mit dem *Catcher*. Hierzu bietet es sich an innerhalb der Catcher-Klasse auch die PShape-Klasse zu nutzen.\n2. Wir programmieren ein Spiel. Da ist es angebracht, spiel-spezifische Logik in einer entsprechenden Klasse zu organisieren. Somit reduzieren wir die Einstiegsdatei noch weiter. Erstelle eine *Game*-Klasse und verschiebe die restliche Logik aus der Einstiegsdatei. Nun sollte die Einstiegsdatei neben dem Instanziieren der Game-Klasse und ein startender Methode-Aufruf auf dessen Objekt nur noch für das Aufnehmen des *mousePressed*-Events zuständig sein.\n\n```processing\nfloat playerPosX;\nGame game;\n\nvoid setup() {\n  size(400, 640);\n  game = new Game();\n}\n\nvoid draw() {\n  background(50);\n  if (mousePressed) {\n    playerPosX = mouseX;\n  }\n  game.execute();\n}\n```\n[Mögliche Lösung](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level3/CatcherTutorialLevel3A3/)\n\n[Github Repository Catcher](https://github.com/Flocksserver/CatcherTutorial)\n[Github Repository Tutorial](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level3/Processing_Tutorial_Level_%233-CatcherGameTutorial.md)",
      "json_metadata": "{\"tags\":[\"programming\",\"processing\",\"java\",\"tutorial\"],\"image\":[\"https://github.com/Flocksserver/CatcherTutorial/raw/master/tutorial/Level3/classobject.png\",\"https://github.com/Flocksserver/CatcherTutorial/raw/master/tutorial/Level3/newTab.png\"],\"links\":[\"https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level0/Processing_Tutorial_Level_%230-CatcherGameTutorial.md\",\"https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level1/Processing_Tutorial_Level_%231-CatcherGameTutorial.md\",\"https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level2/Processing_Tutorial_Level_%232-CatcherGameTutorial.md\",\"http://processing.github.io/processing-javadocs/core/processing/core/PApplet.html#createShape--\",\"https://docs.oracle.com/javase/7/docs/api/java/util/Stack.html\",\"https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level3/CatcherTutorialLevel3A1/CatcherTutorialLevel3A1.pde\",\"https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level3/CatcherTutorialLevel3A2/\",\"https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level3/CatcherTutorialLevel3A3/\",\"https://github.com/Flocksserver/CatcherTutorial\",\"https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level3/Processing_Tutorial_Level_%233-CatcherGameTutorial.md\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}",
      "parent_author": "",
      "parent_permlink": "programming",
      "permlink": "catcher-game-tutorial-level-3",
      "title": "Catcher Game Tutorial Level 3"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-09T15:18:00",
  "trx_id": "d77dbeb7c5f1d5c9f64492acc2b14230a320b0b1",
  "trx_in_block": 44,
  "virtual_op": 0
}
2018/01/09 10:18:09
authortechnature
bodyHey, echt nices Tutorial &#128522; Ich wusste gar nicht, dass es so einfach ist die Karten wirklich zu manipulieren&#128552; Richtig krass, dass einige Institutionen dann noch immer diese Technologie verwenden. Ich hab allerdings noch eine Frage: Was macht *DESFire EV1* so sicher?
json metadata{"tags":["nfc"],"app":"steemit/0.1"}
parent authorflocksserver
parent permlinknfc-mifare-1k-4k-hacking
permlinkre-flocksserver-nfc-mifare-1k-4k-hacking-20180109t101809006z
title
Transaction InfoBlock #18823956/Trx 0072afa1d366396ae4f6bb99414e3ac29157c706
View Raw JSON Data
{
  "block": 18823956,
  "op": [
    "comment",
    {
      "author": "technature",
      "body": "Hey,\necht nices Tutorial &#128522;\nIch wusste gar nicht, dass es so einfach ist die Karten wirklich zu manipulieren&#128552; \nRichtig krass, dass einige Institutionen dann noch immer diese Technologie verwenden.\n\nIch hab allerdings noch eine Frage: Was macht *DESFire EV1* so sicher?",
      "json_metadata": "{\"tags\":[\"nfc\"],\"app\":\"steemit/0.1\"}",
      "parent_author": "flocksserver",
      "parent_permlink": "nfc-mifare-1k-4k-hacking",
      "permlink": "re-flocksserver-nfc-mifare-1k-4k-hacking-20180109t101809006z",
      "title": ""
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-09T10:18:09",
  "trx_id": "0072afa1d366396ae4f6bb99414e3ac29157c706",
  "trx_in_block": 28,
  "virtual_op": 0
}
2018/01/09 10:04:21
authorflocksserver
permlinknfc-mifare-1k-4k-hacking
votertechnature
weight10000 (100.00%)
Transaction InfoBlock #18823681/Trx 103ba099771fa6dcec92cf4cff591253f8b59389
View Raw JSON Data
{
  "block": 18823681,
  "op": [
    "vote",
    {
      "author": "flocksserver",
      "permlink": "nfc-mifare-1k-4k-hacking",
      "voter": "technature",
      "weight": 10000
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-09T10:04:21",
  "trx_id": "103ba099771fa6dcec92cf4cff591253f8b59389",
  "trx_in_block": 7,
  "virtual_op": 0
}
2018/01/09 09:16:42
authorflocksserver
permlinkcatcher-game-tutorial-level-2
votersuryanihb
weight10000 (100.00%)
Transaction InfoBlock #18822728/Trx c5f9aa3458f1a7220450a8e622601c55b2b78806
View Raw JSON Data
{
  "block": 18822728,
  "op": [
    "vote",
    {
      "author": "flocksserver",
      "permlink": "catcher-game-tutorial-level-2",
      "voter": "suryanihb",
      "weight": 10000
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-09T09:16:42",
  "trx_id": "c5f9aa3458f1a7220450a8e622601c55b2b78806",
  "trx_in_block": 3,
  "virtual_op": 0
}
2018/01/09 09:15:12
authorflocksserver
permlinkcatcher-game-tutorial-level-2
voterflocksserver
weight10000 (100.00%)
Transaction InfoBlock #18822698/Trx dbd1f5e9040614cd46faf03e8ff8f7e52e6a766b
View Raw JSON Data
{
  "block": 18822698,
  "op": [
    "vote",
    {
      "author": "flocksserver",
      "permlink": "catcher-game-tutorial-level-2",
      "voter": "flocksserver",
      "weight": 10000
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-09T09:15:12",
  "trx_id": "dbd1f5e9040614cd46faf03e8ff8f7e52e6a766b",
  "trx_in_block": 1,
  "virtual_op": 0
}
2018/01/09 09:15:12
authorflocksserver
body# Zusammenfassung In diesem Level lernst du eine neue Möglichkeit kennen Formen zu zeichnen, um mehr Kontrolle über diese Objekte zu haben. Weiter werden wir kleine Kreise animiert vom oben nach unten herab fallen lassen. Eine Datenstruktur ArrayList und die for-Schleife werden eingeführt sowie das zeitlich bedingte Ausführen einer Funktion. Außerdem schreibst du eine eigene Funktion. | Thema | Voraussetzungen | | --------------------- | ----------------------- | | Schwierigkeit | *** | | Hardware | PC (Windows/Mac/Linux) | | Software | Browser, Internetzugang, Processing IDE | | CatcherTutorial Level | [0](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level0/Processing_Tutorial_Level_%230-CatcherGameTutorial.md),[1](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level1/Processing_Tutorial_Level_%231-CatcherGameTutorial.md) | | Programmierung | Aufruf von Funktionen, Variablen, Events (mousePressed), Bedingte Anweisung und Verzweigung (if, else))| ## Programmierung Bisher nutzt du nur die beiden Standardfunktionen von Processing (setup und draw). Das wird in diesem Level ändern. Funktionen sind Programmteile, die aufgerufen werden können (einmal oder häufiger). Sie können Werte zurück geben nachdem der Programmcode innerhalb der Funktion durchgelaufen ist - muss aber nicht. Das Schlüsselwort **void** gibt an, dass diese Funktion kein Rückgabewert hat. Wenn du etwas zurükgeben möchtest, musst du dies statt dem *void* angeben. Zum Beispiel **boolean** (*int, float, String, PShape, ...* sind genauso möglich). ```processing void draw() { // Kein Rückgabewert } // Funktion braucht ein return. Muss eine boolsche Variable oder Ausdruck sein. boolean isOnePlusOneEqualsTwo(){ return 1 + 1 == 2; } ``` for-Schleifen führen den Programmcode in ihrem Bauch (zwischen den geschweiften Klammern) so häufig aus, bis eine Bedingung erfüllt ist. Beispiel: i wird auf 0 gesetzt (*int i = 0* nur einmal am Anfang). Solange i kleiner als 3 (*i < 3*) ist, wird der Programmcode ausgeführt. Nach jedem Durchlauf des Programmcodes, wird i um eins erhöht (*i++*) ```processing // 3 Schleifendurchläufe // i = 0 // i = 1 // i = 2 // i = 3? - Nein! denn i ist nicht mehr kleiner 3 for(int i = 0; i < 3; i++){ } } ``` ### Aufgabe 1 Es existiert bereits ein *Catcher* um Objekte zu fangen. Etwas zu fangen gibt es allerding noch nicht. 1. Zeichne in die Mitte des Fensters ein weiteres Objekt mit Hilfe der PShape-Klasse. Du weißt nicht was die PShape-Klasse ist? Schaue auf der [Processing-Webseite](https://processing.org/) unter Tutorials nach PShape. 2. Lasse dein Objekt von oben nach unten durch fallen. Schaue dir dafür die [translate](https://processing.org/reference/translate_.html)-Methode an, um 2D-Objekte zu transformieren. [Mögliche Lösung](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level2/CatcherTutorialLevel2A1/CatcherTutorialLevel2A1.pde) ### Aufgabe 2 1. Ein einzelnes Objekt ist nicht genug! Erstelle 6 weitere. 2. Um auf die Objekte besser zugreifen zu können, kannst du diese in einer [Liste](https://processing.org/reference/ArrayList.html) organisiert. Ok, nicht nur kannst - solltest du auch! 3. Setze jedes Objekt auf eine andere Startposition 4. Setze die x-Startposition **zufällig** und die y-Position oben außerhalb des Fensters 5. Otional: Objekte werden zufällig entlang der x-Achse gesetzt. Das bedeutet, dass diese auch soweit am rechten oder linken Rand platziert werden, dass die Objekte teils abgeschnitten sind. Hast du eine Idee wie du das verhindern kannst? [Mögliche Lösung](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level2/CatcherTutorialLevel2A2/CatcherTutorialLevel2A2.pde) ### Aufgabe 3 1. Alle Objekte starten im Moment zur gleichen Zeit. Lasse die Objekte im Abstand von einer Sekunde herunterfallen. Erstelle dafür eine Funktion. [Mögliche Lösung](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level2/CatcherTutorialLevel2A3/CatcherTutorialLevel2A3.pde) [Github Repository Catcher](https://github.com/Flocksserver/CatcherTutorial) [Github Repository Tutorial](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level1/Processing_Tutorial_Level_%231-CatcherGameTutorial.md)
json metadata{"tags":["programming","processing","java","tutorial"],"links":["https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level0/Processing_Tutorial_Level_%230-CatcherGameTutorial.md","https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level1/Processing_Tutorial_Level_%231-CatcherGameTutorial.md","https://processing.org/","https://processing.org/reference/translate_.html","https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level2/CatcherTutorialLevel2A1/CatcherTutorialLevel2A1.pde","https://processing.org/reference/ArrayList.html","https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level2/CatcherTutorialLevel2A2/CatcherTutorialLevel2A2.pde","https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level2/CatcherTutorialLevel2A3/CatcherTutorialLevel2A3.pde","https://github.com/Flocksserver/CatcherTutorial"],"app":"steemit/0.1","format":"markdown"}
parent author
parent permlinkprogramming
permlinkcatcher-game-tutorial-level-2
titleCatcher Game Tutorial Level 2
Transaction InfoBlock #18822698/Trx dbd1f5e9040614cd46faf03e8ff8f7e52e6a766b
View Raw JSON Data
{
  "block": 18822698,
  "op": [
    "comment",
    {
      "author": "flocksserver",
      "body": "# Zusammenfassung\nIn diesem Level lernst du eine neue Möglichkeit kennen Formen zu zeichnen, um mehr Kontrolle über diese Objekte zu haben. Weiter werden wir kleine Kreise animiert vom oben nach unten herab fallen lassen. Eine Datenstruktur ArrayList und die for-Schleife werden eingeführt sowie das zeitlich bedingte Ausführen einer Funktion. Außerdem schreibst du eine eigene Funktion.\n\n| Thema                 | Voraussetzungen         |\n| --------------------- | ----------------------- |\n| Schwierigkeit         | ***   |\n| Hardware              | PC (Windows/Mac/Linux)  |\n| Software              | Browser, Internetzugang, Processing IDE        |\n| CatcherTutorial Level | [0](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level0/Processing_Tutorial_Level_%230-CatcherGameTutorial.md),[1](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level1/Processing_Tutorial_Level_%231-CatcherGameTutorial.md)                       |\n| Programmierung        | Aufruf von Funktionen, Variablen,  Events (mousePressed), Bedingte Anweisung und Verzweigung (if, else))|\n\n## Programmierung\nBisher nutzt du nur die beiden Standardfunktionen von Processing (setup und draw). Das wird in diesem Level ändern. Funktionen sind Programmteile, die aufgerufen werden können (einmal oder häufiger). Sie können Werte zurück geben nachdem der Programmcode innerhalb der Funktion durchgelaufen ist - muss aber nicht. Das Schlüsselwort **void** gibt an, dass diese Funktion kein Rückgabewert hat. Wenn du etwas zurükgeben möchtest, musst du dies statt dem *void* angeben. Zum Beispiel **boolean** (*int, float, String, PShape, ...* sind genauso möglich).\n```processing\nvoid draw() { // Kein Rückgabewert\n}\n// Funktion braucht ein return. Muss eine boolsche Variable oder Ausdruck sein.\nboolean isOnePlusOneEqualsTwo(){\n  return 1 + 1 == 2;\n}\n```\nfor-Schleifen führen den Programmcode in ihrem Bauch (zwischen den geschweiften Klammern) so häufig aus, bis eine Bedingung erfüllt ist. Beispiel: i wird auf 0 gesetzt (*int i = 0* nur einmal am Anfang). Solange i kleiner als 3 (*i < 3*)  ist, wird der Programmcode ausgeführt. Nach jedem Durchlauf des Programmcodes, wird i um eins erhöht (*i++*)\n```processing\n// 3 Schleifendurchläufe\n// i = 0\n// i = 1\n// i = 2\n// i = 3? - Nein! denn i ist nicht mehr kleiner 3\nfor(int i = 0; i < 3; i++){\n\n  }\n}\n```\n### Aufgabe 1\nEs existiert bereits ein *Catcher* um Objekte zu fangen. Etwas zu fangen gibt es allerding noch nicht.\n1. Zeichne in die Mitte des Fensters ein weiteres Objekt mit Hilfe der PShape-Klasse. Du weißt nicht was die PShape-Klasse ist? Schaue auf der [Processing-Webseite](https://processing.org/) unter Tutorials nach PShape.\n2. Lasse dein Objekt von oben nach unten durch fallen. Schaue dir dafür die [translate](https://processing.org/reference/translate_.html)-Methode an, um 2D-Objekte zu transformieren.\n\n[Mögliche Lösung](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level2/CatcherTutorialLevel2A1/CatcherTutorialLevel2A1.pde)\n\n### Aufgabe 2\n1. Ein einzelnes Objekt ist nicht genug! Erstelle 6 weitere.\n2. Um auf die Objekte besser zugreifen zu können, kannst du diese in einer [Liste](https://processing.org/reference/ArrayList.html) organisiert. Ok, nicht nur kannst - solltest du auch!\n3. Setze jedes Objekt auf eine andere Startposition\n4. Setze die x-Startposition **zufällig** und die y-Position oben außerhalb des Fensters\n5. Otional: Objekte werden zufällig entlang der x-Achse gesetzt. Das bedeutet, dass diese auch soweit am rechten oder linken Rand platziert werden, dass die Objekte teils abgeschnitten sind. Hast du eine Idee wie du das verhindern kannst?\n\n[Mögliche Lösung](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level2/CatcherTutorialLevel2A2/CatcherTutorialLevel2A2.pde)\n\n### Aufgabe 3\n1. Alle Objekte starten im Moment zur gleichen Zeit. Lasse die Objekte im Abstand von einer Sekunde herunterfallen. Erstelle dafür eine Funktion.\n\n[Mögliche Lösung](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level2/CatcherTutorialLevel2A3/CatcherTutorialLevel2A3.pde)\n\n\n[Github Repository Catcher](https://github.com/Flocksserver/CatcherTutorial)\n[Github Repository Tutorial](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level1/Processing_Tutorial_Level_%231-CatcherGameTutorial.md)",
      "json_metadata": "{\"tags\":[\"programming\",\"processing\",\"java\",\"tutorial\"],\"links\":[\"https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level0/Processing_Tutorial_Level_%230-CatcherGameTutorial.md\",\"https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level1/Processing_Tutorial_Level_%231-CatcherGameTutorial.md\",\"https://processing.org/\",\"https://processing.org/reference/translate_.html\",\"https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level2/CatcherTutorialLevel2A1/CatcherTutorialLevel2A1.pde\",\"https://processing.org/reference/ArrayList.html\",\"https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level2/CatcherTutorialLevel2A2/CatcherTutorialLevel2A2.pde\",\"https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level2/CatcherTutorialLevel2A3/CatcherTutorialLevel2A3.pde\",\"https://github.com/Flocksserver/CatcherTutorial\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}",
      "parent_author": "",
      "parent_permlink": "programming",
      "permlink": "catcher-game-tutorial-level-2",
      "title": "Catcher Game Tutorial Level 2"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-09T09:15:12",
  "trx_id": "dbd1f5e9040614cd46faf03e8ff8f7e52e6a766b",
  "trx_in_block": 1,
  "virtual_op": 0
}
2018/01/09 09:03:09
authorflocksserver
body@@ -518,17 +518,150 @@ Level %7C -0 +%5B0%5D(https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level0/Processing_Tutorial_Level_%25230-CatcherGameTutorial.md) @@ -707,48 +707,30 @@ %7C -Funktionen, Funktionsparamter, Variablen +Aufruf von Funktionen %7C%0A%0A# @@ -3010,16 +3010,1397 @@ %0A%3C/div%3E%0A +%3Cbr%3E%0A%0A**if/else** ist eine bedingte Anweisung und Verzweigung. Der Ausdruck im *if* wird ausgewertet. Wenn dieser Wahr (true) ist, wird der Programmcode *doA()* innerhalb der geschweiften Klammern ausgef%C3%BChrt - sonst nicht. Mit *else* hast du die M%C3%B6glichkeit eine alternative Ausf%C3%BChrung anzugeben. Dadurch wird immer das eine *doB()* **oder** das andere *doC()* ausgef%C3%BChrt.%0A%60%60%60processing%0Aif(isThisTrue)%7B%0A doA();%0A%7D%0A%0Aif(isThisAlsoTrue)%7B%0A doB();%0A%7Delse%7B%0A doC();%0A%7D%0A%60%60%60%0AVariablen sind Container, die einen Datentyp haben. Dies kann eine Zahl, eine Zeichenkette, ein boolesche Ausdruck oder ein beliebiges Objekt sein.%0A%60%60%60processing%0Aint a = 1; // Ganze Zahlen. a hat den Wert 1%0Afloat b = 2.5; // Flie%C3%9Fkommazahlen. b hat den Wert 2,5%0AString c = %22Catcher%22; // Zeichenkette. c hat den Wert Catcher%0Aboolean d = true; // Boolesche Ausdruck (true oder false). d hat den Wert true%0APShape catcher; // Leeres Objekt PShape (noch nichts mit = zugewiesen) namens catcher.%0A%60%60%60%0ADu kannst auf Variablen von %C3%BCberall zugreifen, wenn du sie *global* definiert hast. Das bedeutet au%C3%9Ferhalb einer Funktion. Lokale Variablen innerhalb einer Funktion k%C3%B6nnen auch nur dort verwendet werden.%0A%60%60%60processing%0Afloat a = 3.4; // global%0Avoid setup() %7B%0A float b = 1.3; //lokal%0A a // kann ich nutzen%0A b // kann ich nutzen%0A%7D%0Avoid draw() %7B%0A a // kann ich nutzen%0A b // kenne ich nicht - kann ich nicht nutzen%0A%7D%0A%0A%60%60%60 %0A### Auf
json metadata{"tags":["programming","processing","java","tutorial"],"image":["https://github.com/Flocksserver/CatcherTutorial/raw/master/tutorial/Level1/skizze.png","https://github.com/Flocksserver/CatcherTutorial/raw/master/tutorial/Level1/coordinatesystem.png"],"links":["https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level0/Processing_Tutorial_Level_%230-CatcherGameTutorial.md","http://hello.processing.org/","https://processing.org/","https://processing.org/examples/","https://processing.org/reference/","https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level1/CatcherTutorialLevel1A1/CatcherTutorialLevel1A1.pde","https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level1/CatcherTutorialLevel1A2/CatcherTutorialLevel1A2.pde","https://github.com/Flocksserver/CatcherTutorial","https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level1/Processing_Tutorial_Level_%231-CatcherGameTutorial.md"],"app":"steemit/0.1","format":"markdown"}
parent author
parent permlinkprogramming
permlinkcatcher-game-tutorial-level-1
titleCatcher Game Tutorial Level 1
Transaction InfoBlock #18822457/Trx bcb24091df36b04c880b746ada046685e1355c7d
View Raw JSON Data
{
  "block": 18822457,
  "op": [
    "comment",
    {
      "author": "flocksserver",
      "body": "@@ -518,17 +518,150 @@\n Level %7C \n-0\n+%5B0%5D(https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level0/Processing_Tutorial_Level_%25230-CatcherGameTutorial.md)\n         \n@@ -707,48 +707,30 @@\n   %7C \n-Funktionen, Funktionsparamter, Variablen\n+Aufruf von Funktionen \n %7C%0A%0A#\n@@ -3010,16 +3010,1397 @@\n %0A%3C/div%3E%0A\n+%3Cbr%3E%0A%0A**if/else** ist eine bedingte Anweisung und Verzweigung. Der Ausdruck im *if* wird ausgewertet. Wenn dieser Wahr (true) ist, wird der Programmcode *doA()* innerhalb der geschweiften Klammern ausgef%C3%BChrt - sonst nicht. Mit *else* hast du die M%C3%B6glichkeit eine alternative Ausf%C3%BChrung anzugeben. Dadurch wird immer das eine *doB()* **oder** das andere *doC()* ausgef%C3%BChrt.%0A%60%60%60processing%0Aif(isThisTrue)%7B%0A  doA();%0A%7D%0A%0Aif(isThisAlsoTrue)%7B%0A  doB();%0A%7Delse%7B%0A  doC();%0A%7D%0A%60%60%60%0AVariablen sind Container, die einen Datentyp haben. Dies kann eine Zahl, eine Zeichenkette, ein boolesche Ausdruck oder ein beliebiges Objekt sein.%0A%60%60%60processing%0Aint a = 1; // Ganze Zahlen. a hat den Wert 1%0Afloat b = 2.5; // Flie%C3%9Fkommazahlen. b hat den Wert 2,5%0AString c = %22Catcher%22; // Zeichenkette. c hat den Wert Catcher%0Aboolean d = true; // Boolesche Ausdruck (true oder false). d hat den Wert true%0APShape catcher; // Leeres Objekt PShape (noch nichts mit = zugewiesen) namens catcher.%0A%60%60%60%0ADu kannst auf Variablen von %C3%BCberall zugreifen, wenn du sie *global* definiert hast. Das bedeutet au%C3%9Ferhalb einer Funktion. Lokale Variablen innerhalb einer Funktion k%C3%B6nnen auch nur dort verwendet werden.%0A%60%60%60processing%0Afloat a = 3.4; // global%0Avoid setup() %7B%0A  float b = 1.3; //lokal%0A  a // kann ich nutzen%0A  b // kann ich nutzen%0A%7D%0Avoid draw() %7B%0A  a // kann ich nutzen%0A  b // kenne ich nicht - kann ich nicht nutzen%0A%7D%0A%0A%60%60%60\n %0A### Auf\n",
      "json_metadata": "{\"tags\":[\"programming\",\"processing\",\"java\",\"tutorial\"],\"image\":[\"https://github.com/Flocksserver/CatcherTutorial/raw/master/tutorial/Level1/skizze.png\",\"https://github.com/Flocksserver/CatcherTutorial/raw/master/tutorial/Level1/coordinatesystem.png\"],\"links\":[\"https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level0/Processing_Tutorial_Level_%230-CatcherGameTutorial.md\",\"http://hello.processing.org/\",\"https://processing.org/\",\"https://processing.org/examples/\",\"https://processing.org/reference/\",\"https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level1/CatcherTutorialLevel1A1/CatcherTutorialLevel1A1.pde\",\"https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level1/CatcherTutorialLevel1A2/CatcherTutorialLevel1A2.pde\",\"https://github.com/Flocksserver/CatcherTutorial\",\"https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level1/Processing_Tutorial_Level_%231-CatcherGameTutorial.md\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}",
      "parent_author": "",
      "parent_permlink": "programming",
      "permlink": "catcher-game-tutorial-level-1",
      "title": "Catcher Game Tutorial Level 1"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-09T09:03:09",
  "trx_id": "bcb24091df36b04c880b746ada046685e1355c7d",
  "trx_in_block": 36,
  "virtual_op": 0
}
steemdelegated 18.263 SP to @flocksserver
2018/01/08 19:32:18
delegateeflocksserver
delegatorsteem
vesting shares29700.739775 VESTS
Transaction InfoBlock #18806268/Trx da1c9481d97410d2967276cb4e558beea735b8ab
View Raw JSON Data
{
  "block": 18806268,
  "op": [
    "delegate_vesting_shares",
    {
      "delegatee": "flocksserver",
      "delegator": "steem",
      "vesting_shares": "29700.739775 VESTS"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-08T19:32:18",
  "trx_id": "da1c9481d97410d2967276cb4e558beea735b8ab",
  "trx_in_block": 43,
  "virtual_op": 0
}
2018/01/08 16:53:12
authorflocksserver
permlinkcatcher-game-tutorial-level-1
voterhr1
weight5 (0.05%)
Transaction InfoBlock #18803091/Trx 21ce0639fa44870aafb8bb6be927bb66097ce3dc
View Raw JSON Data
{
  "block": 18803091,
  "op": [
    "vote",
    {
      "author": "flocksserver",
      "permlink": "catcher-game-tutorial-level-1",
      "voter": "hr1",
      "weight": 5
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-08T16:53:12",
  "trx_id": "21ce0639fa44870aafb8bb6be927bb66097ce3dc",
  "trx_in_block": 55,
  "virtual_op": 0
}
2018/01/08 16:22:48
authorflocksserver
permlinkcatcher-game-tutorial-level-1
voterflocksserver
weight10000 (100.00%)
Transaction InfoBlock #18802484/Trx 15f9964976dd726d4f5547577065ae7a7d51d5df
View Raw JSON Data
{
  "block": 18802484,
  "op": [
    "vote",
    {
      "author": "flocksserver",
      "permlink": "catcher-game-tutorial-level-1",
      "voter": "flocksserver",
      "weight": 10000
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-08T16:22:48",
  "trx_id": "15f9964976dd726d4f5547577065ae7a7d51d5df",
  "trx_in_block": 32,
  "virtual_op": 0
}
2018/01/08 16:22:48
authorflocksserver
body# Zusammenfassung In diesem Level lernst du die beiden Hauptfunkionen in Processing kennen. In diesem Zuge schauen wir uns das Koordinatensystem eines Fensters an. Du wirst außerdem nach diesem Level Formen darstellen können. | Thema | Voraussetzungen | | --------------------- | ----------------------- | | Schwierigkeit | ** | | Hardware | PC (Windows/Mac/Linux) | | Software | Browser, Internetzugang, Processing IDE | | CatcherTutorial Level | 0 | | Programmierung | Funktionen, Funktionsparamter, Variablen| ## Vorbereitung - Wir gehen nicht auf alle Programmiergrundlagen ein. Wenn du noch nie etwas programmiert hast, schaue dir die [Hello Processing Videos](http://hello.processing.org/) an. Ich würde aber auch allen Processing Neulingen diese Videoreihe empfehlen. So kannst du dir die Suche für einige processing-spezifischen Besonderheiten sparen. - Achte darauf, dass dein Modus auf *Java* gestellt ist. - Speicher den derzeit leeren Sketch unter einem Namen deiner Wahl ab - Öffne die Einstellungen (Datei -> Einstellungen) der Processing IDE. Aktiviere die Checkbox *Codevervollständigung Ctrl-Leerzeichen*. Wenn du beim Programmieren Variablennamen, Funktionsamen oder Paramter beginnst zu Tippen, kannst du dir von der Entwicklungsumgebung mit *Ctrl-Leerzeichen* Vorschläge zur Vervollständigung geben lassen. - Öffne die [Projektwebseite](https://processing.org/) zu Processing. [Beispiele](https://processing.org/examples/) und [Referenzen](https://processing.org/reference/) solltest du hier finden und auch nutzen! ## Das Spiel Ich möchte mit dir zusammen ein Spiel programmieren. Wir nennen es Catcher. Ziel soll es sein, herunter fliegende Objekte einzusammeln und somit einen möglichst hohen Highscore zu erreichen. Verpasste Objekte ziehen Leben ab. Das Spiel muss gestartet und nach verlorener Runde neu gestartet werden können. <div> <img src="https://github.com/Flocksserver/CatcherTutorial/raw/master/tutorial/Level1/skizze.png" width="400"> </div> ## Programmierung In Processing existieren zwei wichtige Hauptfunktionen. Die setup-Methode wird zu Beginn des Programmstarts einmal ausgeführt. Die draw-Methode wird in einer Schleife dauerhaft ausgeführt. ```processing void setup() { } void draw() { } ``` Das Fenster, das du erstellst hat eine Breite und Höhe in Pixel. Jeder Pixel kann durch ein **x** und ein **y** in einem Koordinatensystem exakt bestimmt werden. Dabei ist zu beachten, dass in der Computergrafik der Punkt **x=0** und **y=0** oben links definiert ist. Dies ist im ersten Moment irreführend, da das bei dir wahrscheinlich bisher bekannte System links unten beginnt. Das musst du die gesamte Zeit beachten! <div> <img src="https://github.com/Flocksserver/CatcherTutorial/raw/master/tutorial/Level1/coordinatesystem.png" width="400"> </div> ### Aufgabe 1 1. Erstelle ein Fenster in folgender Größe Breite 400 Pixel und Höhe 640 Pixel 2. Setze den Hintergrund auf eine Farbe 3. Zeichne den *Catcher* (ein Rechteck) im unteren Bereich des Fensters 4. Starte dein Programm mit dem Play-Button oben links in der Entwicklungsumgebung [Mögliche Lösung](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level1/CatcherTutorialLevel1A1/CatcherTutorialLevel1A1.pde) ### Aufgabe 2 1. Der *Catcher* soll sich entlang der x-Achse nach rechts und links verschieben lassen (mit der Maus). 2. Der *Catcher* soll nur verschoben werden, wenn die Maus gedrückt ist. [Mögliche Lösung](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level1/CatcherTutorialLevel1A2/CatcherTutorialLevel1A2.pde) [Github Repository Catcher](https://github.com/Flocksserver/CatcherTutorial) [Github Repository Tutorial](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level1/Processing_Tutorial_Level_%231-CatcherGameTutorial.md)
json metadata{"tags":["programming","processing","java","tutorial"],"image":["https://github.com/Flocksserver/CatcherTutorial/raw/master/tutorial/Level1/skizze.png","https://github.com/Flocksserver/CatcherTutorial/raw/master/tutorial/Level1/coordinatesystem.png"],"links":["http://hello.processing.org/","https://processing.org/","https://processing.org/examples/","https://processing.org/reference/","https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level1/CatcherTutorialLevel1A1/CatcherTutorialLevel1A1.pde","https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level1/CatcherTutorialLevel1A2/CatcherTutorialLevel1A2.pde","https://github.com/Flocksserver/CatcherTutorial","https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level1/Processing_Tutorial_Level_%231-CatcherGameTutorial.md"],"app":"steemit/0.1","format":"markdown"}
parent author
parent permlinkprogramming
permlinkcatcher-game-tutorial-level-1
titleCatcher Game Tutorial Level 1
Transaction InfoBlock #18802484/Trx 15f9964976dd726d4f5547577065ae7a7d51d5df
View Raw JSON Data
{
  "block": 18802484,
  "op": [
    "comment",
    {
      "author": "flocksserver",
      "body": "# Zusammenfassung\nIn diesem Level lernst du die beiden Hauptfunkionen in Processing kennen. In diesem Zuge schauen wir uns das Koordinatensystem eines Fensters an. Du wirst außerdem nach diesem Level Formen darstellen können.\n\n| Thema                 | Voraussetzungen         |\n| --------------------- | ----------------------- |\n| Schwierigkeit         | **           |\n| Hardware              | PC (Windows/Mac/Linux)  |\n| Software              | Browser, Internetzugang, Processing IDE        |\n| CatcherTutorial Level | 0                       |\n| Programmierung        | Funktionen, Funktionsparamter, Variablen|\n\n## Vorbereitung\n- Wir gehen nicht auf alle Programmiergrundlagen ein. Wenn du noch nie etwas programmiert hast, schaue dir die [Hello Processing Videos](http://hello.processing.org/) an. Ich würde aber auch allen Processing Neulingen diese Videoreihe empfehlen. So kannst du dir die Suche für einige processing-spezifischen Besonderheiten sparen.\n- Achte darauf, dass dein Modus auf *Java* gestellt ist.\n- Speicher den derzeit leeren Sketch unter einem Namen deiner Wahl ab\n- Öffne die Einstellungen (Datei -> Einstellungen) der Processing IDE. Aktiviere die Checkbox *Codevervollständigung Ctrl-Leerzeichen*. Wenn du beim Programmieren Variablennamen, Funktionsamen oder Paramter beginnst zu Tippen, kannst du dir von der Entwicklungsumgebung mit *Ctrl-Leerzeichen* Vorschläge zur Vervollständigung geben lassen.\n- Öffne die [Projektwebseite](https://processing.org/) zu Processing. [Beispiele](https://processing.org/examples/) und [Referenzen](https://processing.org/reference/) solltest du hier finden und auch nutzen!\n\n## Das Spiel\nIch möchte mit dir zusammen ein Spiel programmieren. Wir nennen es Catcher. Ziel soll es sein, herunter fliegende Objekte einzusammeln und somit einen möglichst hohen Highscore zu erreichen. Verpasste Objekte ziehen Leben ab. Das Spiel muss gestartet und nach verlorener Runde neu gestartet werden können.\n<div>\n<img src=\"https://github.com/Flocksserver/CatcherTutorial/raw/master/tutorial/Level1/skizze.png\" width=\"400\">\n</div>\n\n## Programmierung\nIn Processing existieren zwei wichtige Hauptfunktionen. Die setup-Methode wird zu Beginn des Programmstarts einmal ausgeführt. Die draw-Methode wird in einer Schleife dauerhaft ausgeführt.\n```processing\nvoid setup() {\n\n}\n\nvoid draw() {\n\n}\n```\nDas Fenster, das du erstellst hat eine Breite und Höhe in Pixel. Jeder Pixel kann durch ein **x** und ein **y** in einem Koordinatensystem exakt bestimmt werden. Dabei ist zu beachten, dass in der Computergrafik der Punkt **x=0** und **y=0** oben links definiert ist. Dies ist im ersten Moment irreführend, da das bei dir wahrscheinlich bisher bekannte System links unten beginnt. Das musst du die gesamte Zeit beachten!\n<div>\n<img src=\"https://github.com/Flocksserver/CatcherTutorial/raw/master/tutorial/Level1/coordinatesystem.png\" width=\"400\">\n</div>\n\n### Aufgabe 1\n1. Erstelle ein Fenster in folgender Größe Breite 400 Pixel und Höhe 640 Pixel\n2. Setze den Hintergrund auf eine Farbe\n3. Zeichne den *Catcher* (ein Rechteck) im unteren Bereich des Fensters\n4. Starte dein Programm mit dem Play-Button oben links in der Entwicklungsumgebung\n\n[Mögliche Lösung](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level1/CatcherTutorialLevel1A1/CatcherTutorialLevel1A1.pde)\n\n### Aufgabe 2\n1. Der *Catcher* soll sich entlang der x-Achse nach rechts und links verschieben lassen (mit der Maus).\n2. Der *Catcher* soll nur verschoben werden, wenn die Maus gedrückt ist.\n\n[Mögliche Lösung](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level1/CatcherTutorialLevel1A2/CatcherTutorialLevel1A2.pde)\n\n[Github Repository Catcher](https://github.com/Flocksserver/CatcherTutorial)\n[Github Repository Tutorial](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level1/Processing_Tutorial_Level_%231-CatcherGameTutorial.md)",
      "json_metadata": "{\"tags\":[\"programming\",\"processing\",\"java\",\"tutorial\"],\"image\":[\"https://github.com/Flocksserver/CatcherTutorial/raw/master/tutorial/Level1/skizze.png\",\"https://github.com/Flocksserver/CatcherTutorial/raw/master/tutorial/Level1/coordinatesystem.png\"],\"links\":[\"http://hello.processing.org/\",\"https://processing.org/\",\"https://processing.org/examples/\",\"https://processing.org/reference/\",\"https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level1/CatcherTutorialLevel1A1/CatcherTutorialLevel1A1.pde\",\"https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level1/CatcherTutorialLevel1A2/CatcherTutorialLevel1A2.pde\",\"https://github.com/Flocksserver/CatcherTutorial\",\"https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level1/Processing_Tutorial_Level_%231-CatcherGameTutorial.md\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}",
      "parent_author": "",
      "parent_permlink": "programming",
      "permlink": "catcher-game-tutorial-level-1",
      "title": "Catcher Game Tutorial Level 1"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-08T16:22:48",
  "trx_id": "15f9964976dd726d4f5547577065ae7a7d51d5df",
  "trx_in_block": 32,
  "virtual_op": 0
}
2018/01/08 16:20:15
authorflocksserver
body@@ -676,15 +676,9 @@ %7C -:star: +*
json metadata{"tags":["programming","processing","java","tutorial"],"image":["https://github.com/Flocksserver/CatcherTutorial/raw/master/tutorial/Level0/addmodus.png","https://github.com/Flocksserver/CatcherTutorial/raw/master/tutorial/Level0/installmodus.png","https://github.com/Flocksserver/CatcherTutorial/raw/master/tutorial/Level0/startmodus.png","https://github.com/Flocksserver/CatcherTutorial/raw/master/tutorial/Level0/downloadSDK.png"],"links":["http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html","https://processing.org/download/","https://github.com/Flocksserver/CatcherTutorial","https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level0/Processing_Tutorial_Level_%230-CatcherGameTutorial.md"],"app":"steemit/0.1","format":"markdown"}
parent author
parent permlinkprogramming
permlinkcatcher-game-tutorial-level-0-de
titleCatcher Game Tutorial Level 0
Transaction InfoBlock #18802433/Trx 0e2010092cf70d1ffa13eec12759959b65d6344f
View Raw JSON Data
{
  "block": 18802433,
  "op": [
    "comment",
    {
      "author": "flocksserver",
      "body": "@@ -676,15 +676,9 @@\n   %7C \n-:star: \n+*\n     \n",
      "json_metadata": "{\"tags\":[\"programming\",\"processing\",\"java\",\"tutorial\"],\"image\":[\"https://github.com/Flocksserver/CatcherTutorial/raw/master/tutorial/Level0/addmodus.png\",\"https://github.com/Flocksserver/CatcherTutorial/raw/master/tutorial/Level0/installmodus.png\",\"https://github.com/Flocksserver/CatcherTutorial/raw/master/tutorial/Level0/startmodus.png\",\"https://github.com/Flocksserver/CatcherTutorial/raw/master/tutorial/Level0/downloadSDK.png\"],\"links\":[\"http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html\",\"https://processing.org/download/\",\"https://github.com/Flocksserver/CatcherTutorial\",\"https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level0/Processing_Tutorial_Level_%230-CatcherGameTutorial.md\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}",
      "parent_author": "",
      "parent_permlink": "programming",
      "permlink": "catcher-game-tutorial-level-0-de",
      "title": "Catcher Game Tutorial Level 0"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-08T16:20:15",
  "trx_id": "0e2010092cf70d1ffa13eec12759959b65d6344f",
  "trx_in_block": 18,
  "virtual_op": 0
}
2018/01/08 12:13:00
authorflocksserver
permlinkcatcher-game-tutorial-level-0-de
voteriqrarasheed
weight10000 (100.00%)
Transaction InfoBlock #18797505/Trx 1b6ffe995fb16dc37b152fa48a666499d43bcdab
View Raw JSON Data
{
  "block": 18797505,
  "op": [
    "vote",
    {
      "author": "flocksserver",
      "permlink": "catcher-game-tutorial-level-0-de",
      "voter": "iqrarasheed",
      "weight": 10000
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-08T12:13:00",
  "trx_id": "1b6ffe995fb16dc37b152fa48a666499d43bcdab",
  "trx_in_block": 3,
  "virtual_op": 0
}
2018/01/08 12:09:00
authorflocksserver
permlinkcatcher-game-tutorial-level-0-de
voterflocksserver
weight10000 (100.00%)
Transaction InfoBlock #18797425/Trx 64ecb0057652202ab58ff0ceb962dde4db096ded
View Raw JSON Data
{
  "block": 18797425,
  "op": [
    "vote",
    {
      "author": "flocksserver",
      "permlink": "catcher-game-tutorial-level-0-de",
      "voter": "flocksserver",
      "weight": 10000
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-08T12:09:00",
  "trx_id": "64ecb0057652202ab58ff0ceb962dde4db096ded",
  "trx_in_block": 4,
  "virtual_op": 0
}
2018/01/08 12:09:00
authorflocksserver
body# Einleitung Hallo Programmier-StarterIn! In diesem Tutorial lernst du mit meiner Hilfe das Programmieren. Wir entwickeln zusammen ein Spiel, dass du auf dem Desktop oder auf einem Android Smartphone spielen kannst. Hierbei werde ich Lösungen für Probleme vorschlagen oder Beispiele geben. Es liegt an dir, wie genau du diese umsetzen willst. Sei kreativ! Du kannst dem Spiel einen ganz eigenen Charakter geben. # Zusammenfassung In diesem Level geht es um die Einrichtung der Entwicklungsumgebung und das Installieren der benötigten Komponenten. | Thema | Voraussetzungen | | --------------------- | ----------------------- | | Schwierigkeit | :star: | | Hardware | PC (Windows/Mac/Linux) | | Software | Browser, Internetzugang | | CatcherTutorial Level | % | | Programmierung | % | ## Java installieren Für die Ausführung der Entwicklungsumgebung und das Programmieren benötigst du Java. Falls dies noch nicht auf deinem PC installiert ist, gehe auf die [Oracle Webseite](http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html), lade das *Java SE Development Kit* herunter und installiere es. Wähle für dein Betriebssystem das richtige Paket (Windows bei dir wahrscheinlich: *Windows x64*, Mac: *macOS*, Linux: *Linux x64*). ## Processing installieren Processing ist eine kostenlose Entwicklungsumgebung. Gehe auf die [Processing Webseite](https://processing.org/download/), lade dir die Version für dein Betriebssystem herunter (Windows bei dir wahrscheinlich: *Windows 64-bit*, Mac: *Mac OS X*, Linux: *Linux 64-bit*) und packe das Paket an einem Ort deiner Wahl aus. Installiere oder starte Processing. ## Processing Android Im Laufe des Tutorials wird die Anwendung nicht nur auf dem Desktop ausgeführt. Du wirst das Spiel auch auf einem Android Smartphone ausführen können. Hierzu muss der Android Modus in Processing aktiviert werden. #### 1.Schritt <div> <img src="https://github.com/Flocksserver/CatcherTutorial/raw/master/tutorial/Level0/addmodus.png" width="400"> </div> #### 2.Schritt <div> <img src="https://github.com/Flocksserver/CatcherTutorial/raw/master/tutorial/Level0/installmodus.png" width="400"> </div> #### 3.Schritt <div> <img src="https://github.com/Flocksserver/CatcherTutorial/raw/master/tutorial/Level0/startmodus.png" width="400"> </div> #### 4.Schritt Nachdem du das erste mal den Android Modus startest, wirst du nach dem Android-SDK gefragt. Das SDK wird für das Kompilieren der Android-App benötigt. Wenn du noch kein Android-SDK auf dem PC hast kannst du dieses direkt herunterladen. <div> <img src="https://github.com/Flocksserver/CatcherTutorial/raw/master/tutorial/Level0/downloadSDK.png" width="400"> </div> [Github Repository Catcher](https://github.com/Flocksserver/CatcherTutorial) [Github Repository Tutorial](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level0/Processing_Tutorial_Level_%230-CatcherGameTutorial.md)
json metadata{"tags":["programming","processing","java","tutorial"],"image":["https://github.com/Flocksserver/CatcherTutorial/raw/master/tutorial/Level0/addmodus.png","https://github.com/Flocksserver/CatcherTutorial/raw/master/tutorial/Level0/installmodus.png","https://github.com/Flocksserver/CatcherTutorial/raw/master/tutorial/Level0/startmodus.png","https://github.com/Flocksserver/CatcherTutorial/raw/master/tutorial/Level0/downloadSDK.png"],"links":["http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html","https://processing.org/download/","https://github.com/Flocksserver/CatcherTutorial","https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level0/Processing_Tutorial_Level_%230-CatcherGameTutorial.md"],"app":"steemit/0.1","format":"markdown"}
parent author
parent permlinkprogramming
permlinkcatcher-game-tutorial-level-0-de
titleCatcher Game Tutorial Level 0 :de:
Transaction InfoBlock #18797425/Trx 64ecb0057652202ab58ff0ceb962dde4db096ded
View Raw JSON Data
{
  "block": 18797425,
  "op": [
    "comment",
    {
      "author": "flocksserver",
      "body": "# Einleitung\nHallo Programmier-StarterIn! In diesem Tutorial lernst du mit meiner Hilfe das Programmieren. Wir entwickeln zusammen ein Spiel, dass du auf dem Desktop oder auf einem Android Smartphone spielen kannst. Hierbei werde ich Lösungen für Probleme vorschlagen oder Beispiele geben. Es liegt an dir, wie genau du diese umsetzen willst. Sei kreativ! Du kannst dem Spiel einen ganz eigenen Charakter geben.\n\n# Zusammenfassung\nIn diesem Level geht es um die Einrichtung der Entwicklungsumgebung und das Installieren der benötigten Komponenten.\n\n| Thema                 | Voraussetzungen         |\n| --------------------- | ----------------------- |\n| Schwierigkeit         | :star:                  |\n| Hardware              | PC (Windows/Mac/Linux)  |\n| Software              | Browser, Internetzugang |\n| CatcherTutorial Level | %                       |\n| Programmierung        | %                       |\n\n## Java installieren\nFür die Ausführung der Entwicklungsumgebung und das Programmieren benötigst du Java. Falls dies noch nicht auf deinem PC installiert ist, gehe auf die [Oracle Webseite](http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html), lade das *Java SE Development Kit* herunter und installiere es. Wähle für dein Betriebssystem das richtige Paket (Windows bei dir wahrscheinlich: *Windows x64*, Mac: *macOS*, Linux: *Linux x64*).\n\n## Processing installieren\nProcessing ist eine kostenlose Entwicklungsumgebung. Gehe auf die [Processing Webseite](https://processing.org/download/), lade dir die Version für dein Betriebssystem herunter (Windows bei dir wahrscheinlich: *Windows 64-bit*, Mac: *Mac OS X*, Linux: *Linux 64-bit*) und packe das Paket an einem Ort deiner Wahl aus. Installiere oder starte Processing.\n\n## Processing Android\nIm Laufe des Tutorials wird die Anwendung nicht nur auf dem Desktop ausgeführt. Du wirst das Spiel auch auf einem Android Smartphone ausführen können. Hierzu muss der Android Modus in Processing aktiviert werden.\n#### 1.Schritt\n<div>\n<img src=\"https://github.com/Flocksserver/CatcherTutorial/raw/master/tutorial/Level0/addmodus.png\" width=\"400\">\n</div>\n\n#### 2.Schritt\n<div>\n<img src=\"https://github.com/Flocksserver/CatcherTutorial/raw/master/tutorial/Level0/installmodus.png\" width=\"400\">\n</div>\n\n#### 3.Schritt\n<div>\n<img src=\"https://github.com/Flocksserver/CatcherTutorial/raw/master/tutorial/Level0/startmodus.png\" width=\"400\">\n</div>\n\n#### 4.Schritt\nNachdem du das erste mal den Android Modus startest, wirst du nach dem Android-SDK gefragt. Das SDK wird für das Kompilieren der Android-App benötigt. Wenn du noch kein Android-SDK auf dem PC hast kannst du dieses direkt herunterladen.\n<div>\n<img src=\"https://github.com/Flocksserver/CatcherTutorial/raw/master/tutorial/Level0/downloadSDK.png\" width=\"400\">\n</div>\n\n[Github Repository Catcher](https://github.com/Flocksserver/CatcherTutorial)\n[Github Repository Tutorial](https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level0/Processing_Tutorial_Level_%230-CatcherGameTutorial.md)",
      "json_metadata": "{\"tags\":[\"programming\",\"processing\",\"java\",\"tutorial\"],\"image\":[\"https://github.com/Flocksserver/CatcherTutorial/raw/master/tutorial/Level0/addmodus.png\",\"https://github.com/Flocksserver/CatcherTutorial/raw/master/tutorial/Level0/installmodus.png\",\"https://github.com/Flocksserver/CatcherTutorial/raw/master/tutorial/Level0/startmodus.png\",\"https://github.com/Flocksserver/CatcherTutorial/raw/master/tutorial/Level0/downloadSDK.png\"],\"links\":[\"http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html\",\"https://processing.org/download/\",\"https://github.com/Flocksserver/CatcherTutorial\",\"https://github.com/Flocksserver/CatcherTutorial/blob/master/tutorial/Level0/Processing_Tutorial_Level_%230-CatcherGameTutorial.md\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}",
      "parent_author": "",
      "parent_permlink": "programming",
      "permlink": "catcher-game-tutorial-level-0-de",
      "title": "Catcher Game Tutorial Level 0  :de:"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-08T12:09:00",
  "trx_id": "64ecb0057652202ab58ff0ceb962dde4db096ded",
  "trx_in_block": 4,
  "virtual_op": 0
}
2018/01/07 19:58:27
authorcheetah
bodyHi! I am a robot. I just upvoted you! I found similar content that readers might be interested in: http://flocksserver.de/
json metadata
parent authorflocksserver
parent permlinkkanban-papierflieger-spiel
permlinkcheetah-re-flocksserverkanban-papierflieger-spiel
title
Transaction InfoBlock #18778033/Trx 089a475cfb8582c104fec69b9c53c1950a185db9
View Raw JSON Data
{
  "block": 18778033,
  "op": [
    "comment",
    {
      "author": "cheetah",
      "body": "Hi! I am a robot. I just upvoted you! I found similar content that readers might be interested in:\nhttp://flocksserver.de/",
      "json_metadata": "",
      "parent_author": "flocksserver",
      "parent_permlink": "kanban-papierflieger-spiel",
      "permlink": "cheetah-re-flocksserverkanban-papierflieger-spiel",
      "title": ""
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-07T19:58:27",
  "trx_id": "089a475cfb8582c104fec69b9c53c1950a185db9",
  "trx_in_block": 38,
  "virtual_op": 0
}
2018/01/07 19:58:21
authorflocksserver
permlinkkanban-papierflieger-spiel
votercheetah
weight8 (0.08%)
Transaction InfoBlock #18778031/Trx e7a155ddf3c190aaa70617b471e80b13ccf9c561
View Raw JSON Data
{
  "block": 18778031,
  "op": [
    "vote",
    {
      "author": "flocksserver",
      "permlink": "kanban-papierflieger-spiel",
      "voter": "cheetah",
      "weight": 8
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-07T19:58:21",
  "trx_id": "e7a155ddf3c190aaa70617b471e80b13ccf9c561",
  "trx_in_block": 55,
  "virtual_op": 0
}
2018/01/07 18:44:27
authorflocksserver
permlinkkanban-papierflieger-spiel
voterubg
weight100 (1.00%)
Transaction InfoBlock #18776554/Trx e3b2b0d5388305d4cedbe79923baf7fe06053c45
View Raw JSON Data
{
  "block": 18776554,
  "op": [
    "vote",
    {
      "author": "flocksserver",
      "permlink": "kanban-papierflieger-spiel",
      "voter": "ubg",
      "weight": 100
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-07T18:44:27",
  "trx_id": "e3b2b0d5388305d4cedbe79923baf7fe06053c45",
  "trx_in_block": 45,
  "virtual_op": 0
}
2018/01/07 18:16:18
authorflocksserver
permlinkkanban-papierflieger-spiel
voterflocksserver
weight10000 (100.00%)
Transaction InfoBlock #18775992/Trx 671aba32006a5641503c9c58189dd4b2d67577f5
View Raw JSON Data
{
  "block": 18775992,
  "op": [
    "vote",
    {
      "author": "flocksserver",
      "permlink": "kanban-papierflieger-spiel",
      "voter": "flocksserver",
      "weight": 10000
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-07T18:16:18",
  "trx_id": "671aba32006a5641503c9c58189dd4b2d67577f5",
  "trx_in_block": 42,
  "virtual_op": 0
}
2018/01/07 18:16:18
authorflocksserver
body## Kanban Lean Production am Beispiel ![kanbanpapierflieger](http://flocksserver.de/img/papierflieger.jpg) In der Informatik sind Prozess- und Vorgehensmodelle ein wichtiger Bestandteil der Softwareentwicklung. Bei Prinzipien und Funktionsweisen wird sich zum Teil bei der klassischen Produktion bedient um auf dessen Grundlagen aufzusetzen. KANBAN ist solch ein Modell, das aus der schlanken Produktion (lean production) kommt. In der Softwareentwicklung gibt es ebenfalls Prinzipien, die sich am lean orientieren - das Agile Manifest. Somit versteht sich KANBAN in der Produktion als lean production Vorgehen und in der Informatik als agiles Vorgehensmodell. Eine Gemeinsamkeit von lean und agil ist die Funktion des Pull-Verfahrens zur Bereitstellung von Ressourcen. Es bedeutet, dass Arbeitsmaterialien oder Aufgaben vom Mitarbeiter selbst zur weiteren Ver- oder Bearbeitung herangezogen werden. Diese zentrale Funktion steht dem Push-Prinzip gegenüber, bei dem Arbeitsmaterialien oder Aufgaben den jeweiligen Mitarbeiter zugeteilt werden. Den Unterschied und dessen verschiedenen Auswirkungen können mit Hilfe eines Spiels Teilnehmern einer Veranstaltung näher gebracht werden. Eine beispielhafte Durchführung solch einer Veranstaltung mit Vortrag, Materialen, Spielerklärung und Lehrskizze ist in meinem [Github-Repository](https://github.com/Flocksserver/kanban-simulation) zu finden.
json metadata{"tags":["agile","kanban","process","paperplane","game"],"image":["http://flocksserver.de/img/papierflieger.jpg"],"links":["https://github.com/Flocksserver/kanban-simulation"],"app":"steemit/0.1","format":"markdown"}
parent author
parent permlinkagile
permlinkkanban-papierflieger-spiel
titleKanban Papierflieger-Spiel
Transaction InfoBlock #18775992/Trx 671aba32006a5641503c9c58189dd4b2d67577f5
View Raw JSON Data
{
  "block": 18775992,
  "op": [
    "comment",
    {
      "author": "flocksserver",
      "body": "## Kanban Lean Production am Beispiel\n\n![kanbanpapierflieger](http://flocksserver.de/img/papierflieger.jpg)\n\nIn der Informatik sind Prozess- und Vorgehensmodelle ein wichtiger Bestandteil der Softwareentwicklung. Bei Prinzipien und Funktionsweisen wird sich zum Teil bei der klassischen Produktion bedient um auf dessen Grundlagen aufzusetzen. KANBAN ist solch ein Modell, das aus der schlanken Produktion (lean production) kommt. In der Softwareentwicklung gibt es ebenfalls Prinzipien, die sich am lean orientieren - das Agile Manifest. Somit versteht sich KANBAN in der Produktion als lean production Vorgehen und in der Informatik als agiles Vorgehensmodell. Eine Gemeinsamkeit von lean und agil ist die Funktion des Pull-Verfahrens zur Bereitstellung von Ressourcen. Es bedeutet, dass Arbeitsmaterialien oder Aufgaben vom Mitarbeiter selbst zur weiteren Ver- oder Bearbeitung herangezogen werden. Diese zentrale Funktion steht dem Push-Prinzip gegenüber, bei dem Arbeitsmaterialien oder Aufgaben den jeweiligen Mitarbeiter zugeteilt werden. \n\nDen Unterschied und dessen verschiedenen Auswirkungen können mit Hilfe eines Spiels Teilnehmern einer Veranstaltung näher gebracht werden. Eine beispielhafte Durchführung solch einer Veranstaltung mit Vortrag, Materialen, Spielerklärung und Lehrskizze ist in meinem [Github-Repository](https://github.com/Flocksserver/kanban-simulation) zu finden.",
      "json_metadata": "{\"tags\":[\"agile\",\"kanban\",\"process\",\"paperplane\",\"game\"],\"image\":[\"http://flocksserver.de/img/papierflieger.jpg\"],\"links\":[\"https://github.com/Flocksserver/kanban-simulation\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}",
      "parent_author": "",
      "parent_permlink": "agile",
      "permlink": "kanban-papierflieger-spiel",
      "title": "Kanban Papierflieger-Spiel"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-07T18:16:18",
  "trx_id": "671aba32006a5641503c9c58189dd4b2d67577f5",
  "trx_in_block": 42,
  "virtual_op": 0
}
flocksserverupdated their account properties
2018/01/07 17:54:51
accountflocksserver
json metadata{"profile":{"profile_image":"http://flocksserver.de/img/profile.png","name":"Flocksserver","website":"http://flocksserver.de"}}
memo keySTM7NEJuUQXhDpZmKjfeAkbMqfdDj2q131szvdV3Vk8ZAu5uaEgL9
posting{"account_auths":[["busy.app",1],["dtube.app",1]],"key_auths":[["STM7rM4tq6gUuTEinbw4LKnm2vZN2BvABBECuTFgbpG1vxN4vjAcD",1]],"weight_threshold":1}
Transaction InfoBlock #18775563/Trx ac1f5b255d98146ae7fe03e0f7876e91caa51078
View Raw JSON Data
{
  "block": 18775563,
  "op": [
    "account_update",
    {
      "account": "flocksserver",
      "json_metadata": "{\"profile\":{\"profile_image\":\"http://flocksserver.de/img/profile.png\",\"name\":\"Flocksserver\",\"website\":\"http://flocksserver.de\"}}",
      "memo_key": "STM7NEJuUQXhDpZmKjfeAkbMqfdDj2q131szvdV3Vk8ZAu5uaEgL9",
      "posting": {
        "account_auths": [
          [
            "busy.app",
            1
          ],
          [
            "dtube.app",
            1
          ]
        ],
        "key_auths": [
          [
            "STM7rM4tq6gUuTEinbw4LKnm2vZN2BvABBECuTFgbpG1vxN4vjAcD",
            1
          ]
        ],
        "weight_threshold": 1
      }
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-07T17:54:51",
  "trx_id": "ac1f5b255d98146ae7fe03e0f7876e91caa51078",
  "trx_in_block": 48,
  "virtual_op": 0
}
2018/01/07 17:53:27
authorflocksserver
permlinkqrdjgehk
voterflocksserver
weight10000 (100.00%)
Transaction InfoBlock #18775535/Trx a561f48f48f5b3bf2fd061a5791c376dd7aaed9e
View Raw JSON Data
{
  "block": 18775535,
  "op": [
    "vote",
    {
      "author": "flocksserver",
      "permlink": "qrdjgehk",
      "voter": "flocksserver",
      "weight": 10000
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-07T17:53:27",
  "trx_id": "a561f48f48f5b3bf2fd061a5791c376dd7aaed9e",
  "trx_in_block": 46,
  "virtual_op": 0
}
2018/01/07 17:53:18
authorflocksserver
permlinkrj10dobi
voterflocksserver
weight10000 (100.00%)
Transaction InfoBlock #18775532/Trx 7324dd215fc846e3e97e3389051c331a0ef5a339
View Raw JSON Data
{
  "block": 18775532,
  "op": [
    "vote",
    {
      "author": "flocksserver",
      "permlink": "rj10dobi",
      "voter": "flocksserver",
      "weight": 10000
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-07T17:53:18",
  "trx_id": "7324dd215fc846e3e97e3389051c331a0ef5a339",
  "trx_in_block": 45,
  "virtual_op": 0
}
2018/01/07 17:52:51
authorflocksserver
permlinkpb0epre8
voterflocksserver
weight10000 (100.00%)
Transaction InfoBlock #18775523/Trx d8a634f92ee3abbb763283d38cd3844bc38f3955
View Raw JSON Data
{
  "block": 18775523,
  "op": [
    "vote",
    {
      "author": "flocksserver",
      "permlink": "pb0epre8",
      "voter": "flocksserver",
      "weight": 10000
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-07T17:52:51",
  "trx_id": "d8a634f92ee3abbb763283d38cd3844bc38f3955",
  "trx_in_block": 3,
  "virtual_op": 0
}
2018/01/07 17:52:06
authorflocksserver
permlinknfc-mifare-1k-4k-hacking
voterflocksserver
weight10000 (100.00%)
Transaction InfoBlock #18775508/Trx 7cb48c65d01495cc63c3c47a488adee9188ecef6
View Raw JSON Data
{
  "block": 18775508,
  "op": [
    "vote",
    {
      "author": "flocksserver",
      "permlink": "nfc-mifare-1k-4k-hacking",
      "voter": "flocksserver",
      "weight": 10000
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-07T17:52:06",
  "trx_id": "7cb48c65d01495cc63c3c47a488adee9188ecef6",
  "trx_in_block": 2,
  "virtual_op": 0
}
2018/01/07 14:52:48
authorcheetah
bodyHi! I am a robot. I just upvoted you! I found similar content that readers might be interested in: http://flocksserver.de/
json metadata
parent authorflocksserver
parent permlinknfc-mifare-1k-4k-hacking
permlinkcheetah-re-flocksservernfc-mifare-1k-4k-hacking
title
Transaction InfoBlock #18771924/Trx 3d30bf32c0a89d82e537393af87e78aed224a9d2
View Raw JSON Data
{
  "block": 18771924,
  "op": [
    "comment",
    {
      "author": "cheetah",
      "body": "Hi! I am a robot. I just upvoted you! I found similar content that readers might be interested in:\nhttp://flocksserver.de/",
      "json_metadata": "",
      "parent_author": "flocksserver",
      "parent_permlink": "nfc-mifare-1k-4k-hacking",
      "permlink": "cheetah-re-flocksservernfc-mifare-1k-4k-hacking",
      "title": ""
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-07T14:52:48",
  "trx_id": "3d30bf32c0a89d82e537393af87e78aed224a9d2",
  "trx_in_block": 14,
  "virtual_op": 0
}
2018/01/07 14:52:42
authorflocksserver
permlinknfc-mifare-1k-4k-hacking
votercheetah
weight8 (0.08%)
Transaction InfoBlock #18771922/Trx ce4c7eb771603b3552cd1ecce29b99e35afcb90c
View Raw JSON Data
{
  "block": 18771922,
  "op": [
    "vote",
    {
      "author": "flocksserver",
      "permlink": "nfc-mifare-1k-4k-hacking",
      "voter": "cheetah",
      "weight": 8
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-07T14:52:42",
  "trx_id": "ce4c7eb771603b3552cd1ecce29b99e35afcb90c",
  "trx_in_block": 41,
  "virtual_op": 0
}
2018/01/07 14:31:03
authorsempervideo
permlinkvad8llnx
voterflocksserver
weight10000 (100.00%)
Transaction InfoBlock #18771489/Trx 2994ab19385c9d4a1fb7be5f1f368a329ce5881a
View Raw JSON Data
{
  "block": 18771489,
  "op": [
    "vote",
    {
      "author": "sempervideo",
      "permlink": "vad8llnx",
      "voter": "flocksserver",
      "weight": 10000
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-07T14:31:03",
  "trx_id": "2994ab19385c9d4a1fb7be5f1f368a329ce5881a",
  "trx_in_block": 43,
  "virtual_op": 0
}
2018/01/07 14:01:15
authorflocksserver
body![NFC-Hack-Image](http://flocksserver.de/img/portfolio/nfcHack.png) NFC-Karten werden mittlerweile überall eingesetzt. Neuere Smartcards, mit beispielsweise Mifare DESFire EV1 Standard, gelten als sicher. In erschreckend vielen Bereichen wird allerdings noch auf die veraltete Mifare 1k/4k Technik gesetzt. Diese "Verschlüsselung" kann in wenigen Sekunden geknackt werden. Auf diesen Umstand - und Misstand, mache ich die Verantwortlichen gerne aufmerksam. Wenn du einmal sehen möchtest, wie so ein Hack grundsätzlich funktioniert, schaue dir die Videos am Ende dieser Seite an. # CopyCard Hack - Bibliothek der Universität Leibniz Mir war es möglich, in der Bibliothek der Universität Leibniz in Hannover, das Druckguthaben auf den CopyCards wiederherzustellen. Da dies in Anwesenheit einer Redakteurin der HAZ (Hannoversche Allgemeine Zeitung) geschah, war die Belohnung ein Artikel am nächsten Tag in der Tagezeitung. Schuld in dem Fall an dem technischen Misstand hatte allerdings die Firma Ricoh, die die Abrechnung in Eigenverantwortung betrieb. Das erschreckende ist, dass diese Infrastruktur erst in den letzten Jahren in Betrieb genommen wurde. Zum Artikel [Student knackt Bibliotheksausweis](http://www.haz.de/Hannover/Aus-der-Stadt/Uebersicht/Student-knackt-Ausweis-fuer-Bibliothek-der-Universitaet-Hannover) # Mensa Hack - Diverse Universitäten und Hochschulen Nicht nur ausgegebenes Geld beim Drucken wiederzubeschaffen ist möglich. An vielen Universitäten und Hochschulen in Deutschland, beziehungsweise in deren Mensen, kann kostenlos gegessen werden. Genauer gesagt die Geldbörse kann beliebig verändert werden. Ist das nicht der Traum eines jeden Studenten? Kostenloses Mensaessen für immer! - Da bekommt man ja gleich Hunger... # Bibliothek Hack -Ostfalia & Universität Osnabrück Bibliotheken haben ähnliche Diebstahlprobleme wie Einkaufsläden. Hier und dort wird versucht etwas hinauszuschmuggeln - Meist im Falle der Bibliotheken aber weniger um sich selbst zu bereichern, als aus Versehen, oder um eine wichtige Quelle (allzuoft als Präsenzexemplar) für die Hausarbeit "auszuborgen". Aus diesem Grund besitzen viele Bibliotheken Tore an den Ein- und Ausgängen. Die moderneren Bibliotheken setzen hierbei, im Gegensatz zu Einkaufsläden, auf beschreibbare NFC-Aufkleber (Tags). Der NFC-"Tag" im Einkaufsladen wird an der Ladentheke unbrauchbar gemacht. Das Buch soll in der Bibliothek aber ausgeliehen und wieder zurückgebracht werden. Da hilft der beschreibbare "Tag", in dem die Information steht, ob das Buch ausgeliehen ist oder nicht. Im Fall nicht-ausgeliehen sollten die Tore am Ein- bzw. Ausgang rot leuchten und blinken. Ungünstig ist nur, dass diese "Tags" ungesichert auch jeder verändern kann. So habe ich eine kleine Android-App geschrieben, die diese "Tags" in den Büchern beschreiben kann. Ausgeliehen oder nicht-ausgeliehen. Somit hat man mit der App die Möglichkeit, mit jedem Buch die Bibliothek zu verlassen, ohne es ausgeliehen zu haben. Andersherum ist es ein Spaß, ausgeliehene Bücher von Kommilitonen unbemerkt wieder auf nicht-ausgeliehen zu beschreiben und deren Gesichter zu beobachten, wenn das Buch wieder abgegeben werden muss und die Tore beim Hineingehen Alarm schlagen... - Die App wird aber nicht herausgegeben und diente lediglich zur Demonstration der Sicherheitslücke. ## Video Teil 1 In diesem Video zeige ich, wie eine NFC-Karte ausgelesen werden kann, die mit Schlüsseln versehen ist. In dem Fall sind es allerdings nur default keys, die direkt gefunden werden. [![video1](https://snap1.d.tube/ipfs/QmeQbpe3M4JXCSdLG8ub4gvYMhBsoidjZ723knYdqLXBSK)](https://d.tube/#!/v/flocksserver/pb0epre8) ## Video Teil 2 In diesem zweiten Teil der NFC-Hack Serie zeige ich euch, wie Kartenkeys mit mfoc wiederhergestellt werden können, wenn der geeignete Angriffsvektor vorliegt. Ich musste leider die echten Schlüssel im Video unkenntlich machen, da diese nicht jeder sehen braucht. [![video2](https://snap1.d.tube/ipfs/QmQ38RHJGoGdj4f699vLKMJc7HJgtXtfbuZyj31sJFE3cd)](https://d.tube/#!/v/flocksserver/rj10dobi) ## Video Teil 3 Im dritten Teil dieser RFID/NFC Serie kommen wir zum wirklich spannenden. Wir manipuliere ich denn Inhalt auf der Karte. In meinem Fall lade ich die Karte mit 10 Euro auf. Ich ändere also den Geldbetrag auf der Karte. Dabei verändere ich den Wert auf der Karte nicht direkt sondern lese den Inhalt in einen Dump, verändere diesen angenehm einfach mit einem Editor und schreibe den Dump anschließend wieder auf die Karte. [![video3](https://snap1.d.tube/ipfs/QmWpFt3Zefg5RtiWAKJSkdrDiAHjH76DrP6Kp2SKQGzfM8)](https://d.tube/#!/v/flocksserver/qrdjgehk)
json metadata{"tags":["nfc","mifare","hack"],"image":["http://flocksserver.de/img/portfolio/nfcHack.png","https://snap1.d.tube/ipfs/QmeQbpe3M4JXCSdLG8ub4gvYMhBsoidjZ723knYdqLXBSK","https://snap1.d.tube/ipfs/QmQ38RHJGoGdj4f699vLKMJc7HJgtXtfbuZyj31sJFE3cd","https://snap1.d.tube/ipfs/QmWpFt3Zefg5RtiWAKJSkdrDiAHjH76DrP6Kp2SKQGzfM8"],"links":["http://www.haz.de/Hannover/Aus-der-Stadt/Uebersicht/Student-knackt-Ausweis-fuer-Bibliothek-der-Universitaet-Hannover","https://d.tube/#!/v/flocksserver/pb0epre8","https://d.tube/#!/v/flocksserver/rj10dobi","https://d.tube/#!/v/flocksserver/qrdjgehk"],"app":"steemit/0.1","format":"markdown"}
parent author
parent permlinknfc
permlinknfc-mifare-1k-4k-hacking
titleNFC Mifare 1k/4k Hacking
Transaction InfoBlock #18770894/Trx 7d3c3f08ab7eac0ec3a48cd0c2089ca290126bac
View Raw JSON Data
{
  "block": 18770894,
  "op": [
    "comment",
    {
      "author": "flocksserver",
      "body": "![NFC-Hack-Image](http://flocksserver.de/img/portfolio/nfcHack.png)\nNFC-Karten werden mittlerweile überall eingesetzt. Neuere Smartcards, mit beispielsweise Mifare DESFire EV1 Standard, gelten als sicher. In erschreckend vielen Bereichen wird allerdings noch auf die veraltete Mifare 1k/4k Technik gesetzt. Diese \"Verschlüsselung\" kann in wenigen Sekunden geknackt werden. Auf diesen Umstand - und Misstand, mache ich die Verantwortlichen gerne aufmerksam. \n\nWenn du einmal sehen möchtest, wie so ein Hack grundsätzlich funktioniert, schaue dir die Videos am Ende dieser Seite an.\n\n# CopyCard Hack - Bibliothek der Universität Leibniz\nMir war es möglich, in der Bibliothek der Universität Leibniz in Hannover, das Druckguthaben auf den CopyCards wiederherzustellen. Da dies in Anwesenheit einer Redakteurin der HAZ (Hannoversche Allgemeine Zeitung) geschah, war die Belohnung ein Artikel am nächsten Tag in der Tagezeitung. Schuld in dem Fall an dem technischen Misstand hatte allerdings die Firma Ricoh, die die Abrechnung in Eigenverantwortung betrieb. Das erschreckende ist, dass diese Infrastruktur erst in den letzten Jahren in Betrieb genommen wurde.\n\nZum Artikel [Student knackt Bibliotheksausweis](http://www.haz.de/Hannover/Aus-der-Stadt/Uebersicht/Student-knackt-Ausweis-fuer-Bibliothek-der-Universitaet-Hannover)\n\n# Mensa Hack - Diverse Universitäten und Hochschulen\nNicht nur ausgegebenes Geld beim Drucken wiederzubeschaffen ist möglich. An vielen Universitäten und Hochschulen in Deutschland, beziehungsweise in deren Mensen, kann kostenlos gegessen werden. Genauer gesagt die Geldbörse kann beliebig verändert werden. Ist das nicht der Traum eines jeden Studenten? Kostenloses Mensaessen für immer! - Da bekommt man ja gleich Hunger...\n\n# Bibliothek Hack -Ostfalia & Universität Osnabrück\nBibliotheken haben ähnliche Diebstahlprobleme wie Einkaufsläden. Hier und dort wird versucht etwas hinauszuschmuggeln - Meist im Falle der Bibliotheken aber weniger um sich selbst zu bereichern, als aus Versehen, oder um eine wichtige Quelle (allzuoft als Präsenzexemplar) für die Hausarbeit \"auszuborgen\". Aus diesem Grund besitzen viele Bibliotheken Tore an den Ein- und Ausgängen. Die moderneren Bibliotheken setzen hierbei, im Gegensatz zu Einkaufsläden, auf beschreibbare NFC-Aufkleber (Tags). Der NFC-\"Tag\" im Einkaufsladen wird an der Ladentheke unbrauchbar gemacht. Das Buch soll in der Bibliothek aber ausgeliehen und wieder zurückgebracht werden. Da hilft der beschreibbare \"Tag\", in dem die Information steht, ob das Buch ausgeliehen ist oder nicht. Im Fall nicht-ausgeliehen sollten die Tore am Ein- bzw. Ausgang rot leuchten und blinken.\n\nUngünstig ist nur, dass diese \"Tags\" ungesichert auch jeder verändern kann. So habe ich eine kleine Android-App geschrieben, die diese \"Tags\" in den Büchern beschreiben kann. Ausgeliehen oder nicht-ausgeliehen. Somit hat man mit der App die Möglichkeit, mit jedem Buch die Bibliothek zu verlassen, ohne es ausgeliehen zu haben. Andersherum ist es ein Spaß, ausgeliehene Bücher von Kommilitonen unbemerkt wieder auf nicht-ausgeliehen zu beschreiben und deren Gesichter zu beobachten, wenn das Buch wieder abgegeben werden muss und die Tore beim Hineingehen Alarm schlagen... - Die App wird aber nicht herausgegeben und diente lediglich zur Demonstration der Sicherheitslücke.\n\n## Video Teil 1\nIn diesem Video zeige ich, wie eine NFC-Karte ausgelesen werden kann, die mit Schlüsseln versehen ist. In dem Fall sind es allerdings nur default keys, die direkt gefunden werden. \n[![video1](https://snap1.d.tube/ipfs/QmeQbpe3M4JXCSdLG8ub4gvYMhBsoidjZ723knYdqLXBSK)](https://d.tube/#!/v/flocksserver/pb0epre8)\n## Video Teil 2\nIn diesem zweiten Teil der NFC-Hack Serie zeige ich euch, wie Kartenkeys mit mfoc wiederhergestellt werden können, wenn der geeignete Angriffsvektor vorliegt. Ich musste leider die echten Schlüssel im Video unkenntlich machen, da diese nicht jeder sehen braucht.\n[![video2](https://snap1.d.tube/ipfs/QmQ38RHJGoGdj4f699vLKMJc7HJgtXtfbuZyj31sJFE3cd)](https://d.tube/#!/v/flocksserver/rj10dobi)\n## Video Teil 3\nIm dritten Teil dieser RFID/NFC Serie kommen wir zum wirklich spannenden. Wir manipuliere ich denn Inhalt auf der Karte. In meinem Fall lade ich die Karte mit 10 Euro auf. Ich ändere also den Geldbetrag auf der Karte. Dabei verändere ich den Wert auf der Karte nicht direkt sondern lese den Inhalt in einen Dump, verändere diesen angenehm einfach mit einem Editor und schreibe den Dump anschließend wieder auf die Karte.\n[![video3](https://snap1.d.tube/ipfs/QmWpFt3Zefg5RtiWAKJSkdrDiAHjH76DrP6Kp2SKQGzfM8)](https://d.tube/#!/v/flocksserver/qrdjgehk)",
      "json_metadata": "{\"tags\":[\"nfc\",\"mifare\",\"hack\"],\"image\":[\"http://flocksserver.de/img/portfolio/nfcHack.png\",\"https://snap1.d.tube/ipfs/QmeQbpe3M4JXCSdLG8ub4gvYMhBsoidjZ723knYdqLXBSK\",\"https://snap1.d.tube/ipfs/QmQ38RHJGoGdj4f699vLKMJc7HJgtXtfbuZyj31sJFE3cd\",\"https://snap1.d.tube/ipfs/QmWpFt3Zefg5RtiWAKJSkdrDiAHjH76DrP6Kp2SKQGzfM8\"],\"links\":[\"http://www.haz.de/Hannover/Aus-der-Stadt/Uebersicht/Student-knackt-Ausweis-fuer-Bibliothek-der-Universitaet-Hannover\",\"https://d.tube/#!/v/flocksserver/pb0epre8\",\"https://d.tube/#!/v/flocksserver/rj10dobi\",\"https://d.tube/#!/v/flocksserver/qrdjgehk\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}",
      "parent_author": "",
      "parent_permlink": "nfc",
      "permlink": "nfc-mifare-1k-4k-hacking",
      "title": "NFC Mifare 1k/4k Hacking"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-07T14:01:15",
  "trx_id": "7d3c3f08ab7eac0ec3a48cd0c2089ca290126bac",
  "trx_in_block": 8,
  "virtual_op": 0
}

Account Metadata

POSTING JSON METADATA
profile{"profile_image":"http://flocksserver.de/img/profile.png","name":"Flocksserver","website":"http://flocksserver.de"}
JSON METADATA
profile{"profile_image":"http://flocksserver.de/img/profile.png","name":"Flocksserver","website":"http://flocksserver.de"}
{
  "posting_json_metadata": {
    "profile": {
      "profile_image": "http://flocksserver.de/img/profile.png",
      "name": "Flocksserver",
      "website": "http://flocksserver.de"
    }
  },
  "json_metadata": {
    "profile": {
      "profile_image": "http://flocksserver.de/img/profile.png",
      "name": "Flocksserver",
      "website": "http://flocksserver.de"
    }
  }
}

Auth Keys

Owner
Single Signature
Public Keys
STM6wcFAv27Ug2hKwDvdRbtBMnWvMCbsDg9PxjaCA3hDaHAMHdD6u1/1
Active
Single Signature
Public Keys
STM8KBT8BGAXcT7DafzUDQFJEyawb6WaAEaLA1XhdBtB4pAtUbu8W1/1
Posting
Single Signature
Public Keys
STM7rM4tq6gUuTEinbw4LKnm2vZN2BvABBECuTFgbpG1vxN4vjAcD1/1
App Permissions
Memo
STM7NEJuUQXhDpZmKjfeAkbMqfdDj2q131szvdV3Vk8ZAu5uaEgL9
{
  "owner": {
    "weight_threshold": 1,
    "account_auths": [],
    "key_auths": [
      [
        "STM6wcFAv27Ug2hKwDvdRbtBMnWvMCbsDg9PxjaCA3hDaHAMHdD6u",
        1
      ]
    ]
  },
  "active": {
    "weight_threshold": 1,
    "account_auths": [],
    "key_auths": [
      [
        "STM8KBT8BGAXcT7DafzUDQFJEyawb6WaAEaLA1XhdBtB4pAtUbu8W",
        1
      ]
    ]
  },
  "posting": {
    "weight_threshold": 1,
    "account_auths": [
      [
        "busy.app",
        1
      ],
      [
        "dtube.app",
        1
      ]
    ],
    "key_auths": [
      [
        "STM7rM4tq6gUuTEinbw4LKnm2vZN2BvABBECuTFgbpG1vxN4vjAcD",
        1
      ]
    ]
  },
  "memo": "STM7NEJuUQXhDpZmKjfeAkbMqfdDj2q131szvdV3Vk8ZAu5uaEgL9"
}

Witness Votes

0 / 30
No active witness votes.
[]