- 1
Серьёзный вопрос к местным игроделам:
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
Всего: 12
0
Серьёзный вопрос к местным игроделам:
А есть ли какое-нибудь универсальное исследование, которое говорит, как должны быть устроены формулки в rpg/mmorpg?
Типа что номер уровня должен зависеть как корень степени 2.8 от количества exp, hp -- линейно от str и int, а дамаг -- как среднее геометрическое дамага перса и дамага его оружия.
Пробовал гуглить/читать геймдев -- нашёл только пространственные рассуждения "начни делать хоть как-то, а потом с помощью говна и палок отбалансируй".
P.S. Да, я хочу написать игру и сидеть в неё играть.
−1
#include <iostream>
using namespace std;
struct MyType { MyType() { cout << __PRETTY_FUNCTION__ << endl; }};
MyType& MyType() { cout << __PRETTY_FUNCTION__ << endl; }
using MyType2 = struct MyType;
int main() {
// MyType t; <- error: expected ‘;’ before ‘t’
MyType();
struct MyType t;
struct MyType t1 = MyType();
struct MyType t2 = (struct MyType)::MyType();
struct MyType t3 = MyType2();
new(&t2) struct MyType();
return 0;
}
Крестоблядство по мотивам #23850.
https://ideone.com/XcK2hf.
Особенно меня порадовал каст на 11 строчке.
−12
#include <iostream>
using namespace std;
struct GetFirst{};
template<class T>
const T &operator,(const T &val, const GetFirst &) {
return val;
}
template<class T, class U>
const T &ifvoid_impl(const T &val, const U &) {
return val;
}
template<class T>
const T &ifvoid_impl(const GetFirst &, const T &val) {
return val;
}
#define ifvoid(X, Y) (ifvoid_impl(((X), GetFirst()), (Y)))
int a() { return 1; }
void f() {}
int main() {
cout << ifvoid(a(), "[a()]") << endl
<< ifvoid(f(), "[f()]") << endl;
}
Лень проверять в шаблонном коде, возвращает ли что-то пользовательская функция? Воспользуйся волшебством оператора запятая!
+918
#include <iostream>
template<typename T>
struct A {
typedef int R();
template<typename U>
static U *f(int) {
return 0;
}
static int f() {
return 0;
}
};
template<typename T>
bool g() { A<T> a; return !(typename A<T>::R*)a.f<int()>(0); }
template<typename T>
bool h() { A<T> a; return !( A<T>::R*)a.f<int()>(0); }
int main() {
std::cout << g<void>() << f<void>() << std::endl;
}
Как можно было придумать такой синтаксис :(
+8
#include <vector>
#include <iostream>
template<class T>
struct reverse_view_impl {
const T& cont;
reverse_view_impl(const T& cont): cont(cont) {}
using iterator = typename T::const_reverse_iterator;
};
template<class T>
reverse_view_impl<T> reverse_view(const T& cont) {
return reverse_view_impl<T>(cont);
}
template<class T>
typename reverse_view_impl<T>::iterator begin(const reverse_view_impl<T>& view) {
return view.cont.crbegin();
}
template<class T>
typename reverse_view_impl<T>::iterator end(const reverse_view_impl<T>& view) {
return view.cont.crend();
}
std::vector<int> one_two_three() { return { 1, 2, 3 }; }
int main() {
for (auto i : reverse_view(one_two_three())) {
std::cout << i << std::endl;
}
}
// Surprise, motherfucker
−45
#define _GNU_SOURCE
#include <ucontext.h>
#include <unistd.h>
#include <signal.h>
#include <stdio.h>
#include <string.h>
volatile void *retry_address = NULL;
volatile int *value = NULL;
int value_holder = 5;
#define debug_write(MESSAGE) write(1, MESSAGE, sizeof(MESSAGE) - 1)
#if defined(REG_RIP)
#define REG_IP REG_RIP
#elif defined(REG_EIP)
#define REG_IP REG_EIP
#else
#error Intel only!
#endif
void segv_handler(int signum, siginfo_t *info, void *ucontext_ptr)
{
debug_write("You forgot to allocate your memory? Let's try again.\n");
value = &value_holder;
ucontext_t *ucontext = ucontext_ptr;
ucontext->uc_mcontext.gregs[REG_IP] = (greg_t)retry_address;
}
int main()
{
__label__ retry_label;
retry_address = &&retry_label;
struct sigaction action;
memset(&action, 0, sizeof(action));
action.sa_sigaction = segv_handler;
action.sa_flags = SA_SIGINFO;
if (sigaction(SIGSEGV, &action, NULL) < 0)
{
perror("sigaction()");
}
retry_label:
debug_write("Trying to access *value...\n");
printf("The *value is %d\n", *value);
return 0;
}
К недавнему вопросу о восстановлении после SIGSEGV.
http://ideone.com/l5pWVp
−107
((*+*)***)
Это не новый смайлик, а один из способов задания анонимных функций в perl6. Как вы думаете, что это за функция?
+2
CharT getline(std::istream& i, string& s, const CharT* delim) {
...
if (!i.operator void*())
break;
...
}
Библиотека Apache UIMA-CPP.
Что могло заставить написать так, вместо обычного if (i)? Какой-то древний компилятор, который не использует каст к указателю в условии?
Ну и, разумеется, в C++11 ios::operator void*() заменили на explicit ios::operator bool(), так что работать перестало.
+3
Вышел php-7.0.0!
Возрадуемся, обсудим?
+5
#include <bits/stdc++.h>
using namespace std;
#define mp make_pair
#define mt make_tuple
#define pb push_back
#define rep(i,a,b) for(int i=a;i<b;++i)
#define forn(i, n) for(int i=0;i<n;++i)
#define forv(it, v) for(typeof((v).begin()) it = (v).begin(); it != (v).end(); ++it)
#define all(c) (c).begin(), (c).end()
#define fst first
#define snd second
typedef vector<int> vi;
typedef vector<vi> vvi;
typedef pair<int,int> pii;
typedef long long ll;
typedef vector<ll> vll;
typedef pair<ll,ll> pll;
typedef long double ld;
typedef string st;
const int inf = 1000 * 1000 * 1000;
const int mod = 1000 * 1000 * 1000 + 7;
const ld pi = acos(-1.0);
const ll infl = 1000ll * 1000ll * 1000ll * 1000ll * 1000ll * 1000ll;
const ld eps = 1e-7;
#define y1 y1_dhs
В продолжении предыдущего ГК: типичное начало олимпиадной проги на С++.