- 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В продолжении предыдущего ГК: типичное начало олимпиадной проги на С++.