Using a computational procedure that imitates tightening of an assembly of billiard balls, we have generated a number of packings of n equal and non-equal disks in regions of various shapes. Our experiments are of three major types. In the first type, the values of n are in thousands, the initial disk configuration is random and a priori one expects the generated packings to be random. In fact, the packings turn out to display non-random geometric patterns and regular features, including polycrystalline textures with "rattlers" typically trapped along the grain boundaries. An experiment of the second type begins with a known or conjectured optimal disk packing configuration, which is then "frustrated" by a small perturbation such as variation of the boundary shape or a relative increase of the size of a selected disk with respect to the sizes of the other disks. We present such frustrated packings for both large n (~ 10, 000) and small n (~ 50 to 200). Motivated by applications in material science and physics, the first and second type of experiments are performed for boundary shapes rarely discussed in the literature on dense packings: torus, a strip cut from a cylinder, a regular hexagon with periodic boundaries. Experiments of the third type involve the shapes popular among mathematicians: circles, squares, and equilateral triangles the boundaries of which are hard reflecting walls. The values of n in these experiments vary from several tens to few hundreds. Here the obtained configurations could be considered as candidates for the densest packings, rather than random ones. Some of these conjecturally optimal packings look regular and the regularity often extends across different values of n. Specifically, as n takes on an increasing sequence of values, n = n(1), n(2), ...n(k), ..., the packings follow a well-defined pattern. This phenomenon is especially striking for packings in equilateral triangles, where (as far as we can tell from our finite computational experiments), not only are there an infinite number of different patterns, each with its own different sequence n(1), n(2), ...n(k), ..., but many of these sequences seem to continue indefinitely. For other shapes, notably squares and circles, the patterns either cease to be optimal or even cease to exist (as packings of non-overlapping disks) above some threshold value n(k0) (depending on the pattern). In these cases, we try to identify the values of n(k0).