Как выбрать случайным образом победителя, учитывая его шанс на победу?
Это классический алгоритм. Визуально его можно представить так:
- Каждая ставка представляется в виде отрезка с длиной, равной ставке.
- Эти отрезки располагаются на прямой друг за другом без разрывов.
- На полученный отрезок, равный по длине сумме всех ставок, равновероятно бросается точка.
- Побеждает та ставка, на отрезок которой эта точка попала.
Лучше брать дробное случайное число:
 double r=frand()*total_chance_sum. 
(как сегодня называется frand() я не знаю - должно выдавать случайное число от 0 до 1). Условие current_sum <= r не нужно, оно выполняется всегда. 
Если хотите повысить шансы тех, кто делал большие ставки - можете возвести эти ставки в квадрат (т.е. если цены - 0.5, 1, 2, то шансы на победу будут 1/21, 4/21, 16/21). Не знаю, хорошо ли это.
Вообще, не очень понятно, как работает 
current_sum += items[i].chance
если сумма целая, а ставка дробная. Она не ругается на потерю точности?